我很难理解何时以及何时不应该在 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要调用的方法。
所以如果这被捕获为name
,然后在代码中的某个地方,将其转换为send(name)
在适当的时间。
这两者之间有很大的区别。立即版本是:
before_action method_name
其中有执行的效果method_name
立即,因为 Ruby 将被迫运行method_name
找出它返回的内容,然后将其传递给before_action
作为一个论点。
推迟的约定是:
before_action :method_name
这只是一个礼貌的请求before_action
,传入一个符号作为参数。你要把它留给before_action
以它认为合适的方式处理这个问题,因此它将来可能会也可能不会执行该方法,这取决于情况。
这就是它在 Ruby 中的工作方式very很少有例外。我能想到的唯一一个在立即指定方法而不是作为代表性符号时不会立即执行方法的是古怪的alias
构造。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)