我不知道为什么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不需要使用与引用变量或赋给变量相同的语法来调用方法,因此需要对所讨论的 token 的性质进行评估。如果由于定义了具有该名称的方法而可能是方法调用,则将这样解释它。如果在源代码编译时不存在此类方法,则默认情况下它将是变量。

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

10-13 04:41