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)