我想知道,为什么 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/