ruby - if 语句中的局部变量

标签 ruby ruby-2.0

我想知道,为什么 a 可见?

if true
  puts 'true'
else
  puts 'false'
  a = 123
end

puts a # no error

# or 
# my_hash = {key: a}
# puts my_hash # :key => nil

但这会导致错误,即使会显示“true”

if true
  puts 'true'
else
  puts 'false'
  a = 123
end

puts a2 # boooooom

最佳答案

如果没有为对象定义方法 a=,则在 if 中引用 a 具有将其声明为变量的效果。

由于 Ruby 不要求使用与引用变量或分配给变量相同的语法来调用方法,因此它需要对相关标记的性质进行评估。如果它可能是一个方法调用,因为已经定义了一个具有该名称的方法,那么它将被解释为这样。如果在编译源代码时不存在这样的方法,那么它将默认为一个变量。

关于ruby - if 语句中的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15770170/

相关文章:

ruby-on-rails - 我们什么时候知道应该使用符号?

ruby - Ruby 1.9.3-p392+ 中的 SSL 连接错误

ruby - Ruby 2 中的垃圾收集,忽略方法的返回值会怎样?

ruby-on-rails - 如何从正则表达式返回 bool 值

ruby - 电子邮件主题未正确分配给 Ruby net/smtp

ruby-on-rails - 如何在 Ruby on Rails 3 中以非阻塞模式运行外部 shell 命令

ruby-on-rails - 如何使用 rest-client gem 发送 header 和 cookie

ruby - Ruby 类名被大写的真正原因是什么?

ruby - 这个 "do ... end"的语义是什么