我想知道,为什么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
但这会导致错误,即使显示“真实”
if true
puts 'true'
else
puts 'false'
a = 123
end
puts a2 # boooooom
答案 0 :(得分:1)
如果没有为对象定义方法a
,则引用if
内的a=
会将其声明为变量。
由于Ruby不需要使用与引用变量或分配变量相同的语法来调用方法,因此需要对所讨论的令牌的性质进行评估。如果可以是一个方法调用,因为已经定义了具有该名称的方法,那么它将被解释为这样。如果在编译源时没有这样的方法,则默认情况下它将是一个变量。