我正在努力了解何时以及何时不使用Rails中的符号。我知道没有很多方法,符号与字符串并不太相似。我也理解这些符号是很好的键,因为同名的符号在内存中占据一个地址。
我很难理解的是,为什么Rails决定在某些情况下使用符号。如果我有回调
before_action :ask_stack_overflow_question
def ask_stack_overflow_question
puts "why did I just use a symbol?"
end
我不太明白为什么将方法视为符号?为什么我需要保持方法不变?
我在文档中找不到任何答案。
谢谢
这并不像看起来那样棘手。
调用时,before_action
您不希望立即执行该方法,但必须描述要以某种方式执行的操作。此处使用符号表示要调用的方法的名称。
因此,如果将其捕获为name
,则稍后在代码中的某个位置,将send(name)
在适当的时间将其转换为。
两者之间有很大的区别。即时版本为:
before_action method_name
它具有method_name
立即执行的效果,因为Ruby将被迫运行method_name
以找出返回的内容,然后将其before_action
作为参数传递给。
延迟的约定是:
before_action :method_name
这只是对的礼貌请求before_action
,传入一个符号作为参数。您before_action
可以自行处理它,但是它认为合适,因此它可能会或可能不会在将来执行该方法,具体取决于情况。
这是它在Ruby中的工作方式,很少有例外。我能想到的唯一一个不能立即执行的方法就是当它被立即指定而不是作为代表符号时才是古怪的alias
构造。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句