ruby - 为什么 Ruby 会在线上为最后一个 undefined variable 引发错误?

标签 ruby interpreter operator-precedence

假设 foobarbaz 没有定义,行

foo bar baz

引发此错误:

NameError(main:Object 的未定义局部变量或方法“baz”)

在 Python、PHP 和 Javascript 的 REPL 中,foo(bar(baz)) 中的第一个问题是未定义 foo。为什么 Ruby 首先提示 baz

最佳答案

Ruby 允许调用的第一个方法 (baz) 动态定义其他两个方法。在实际方法调用发生之前,它不会尝试将 foobar 解析为方法调用,并且它永远不会作为 baz 到达该方法调用首先导致错误。

如果baz动态定义方法foobar,没有问题:

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/

相关文章:

java三元运算符和惰性求值

ruby-on-rails - 为特定页面呈现特定标题

ruby - 使用 Watir 删除元素

python - 为什么 python 在解释之前将源代码编译为字节码?

c - 用 C 语言编写打印方法

c - 在 c 中使用三元运算符的错误

javascript - react JS : no answer from Sinatra server with fetch call

ruby - 如何在 Ruby 上使用 Xively API 库?

python - 在嵌入式 Python 解释器中打印变量

python - 为什么 bool 表达式 "1 in (1, 2, 3) == True"为 False?