假设 foo
、bar
和 baz
没有定义,行
foo bar baz
引发此错误:
NameError(main:Object 的未定义局部变量或方法“baz”)
在 Python、PHP 和 Javascript 的 REPL 中,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!"
关于ruby - 为什么 Ruby 会在线上为最后一个 undefined variable 引发错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50767277/