Sam*_*lor 11 ruby interpreter operator-precedence
假设foo
,bar
和baz
还没有被定义,则线
foo bar baz
引发此错误:
NameError (undefined local variable or method `baz' for main:Object)
在REPLs为Python,PHP和JavaScript的第一问题foo(bar(baz))
是foo
没有定义.为什么Ruby baz
首先抱怨?
Ruby 允许调用的第一个方法 ( baz
) 动态定义其他两个方法。在实际方法调用发生之前,它不会尝试解析foo
或bar
作为方法调用,并且它永远不会到达该方法调用,因为baz
首先会导致错误。
如果baz
动态定义方法foo
和bar
,就没有问题:
def baz
define_method(:foo) { |x| "foo #{x}" }
define_method(:bar) { |x| "bar #{x}" }
"baz!"
end
foo bar baz # => "foo bar baz!"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
107 次 |
最近记录: |