Ruby解释器区分对局部变量和方法的的调用
局部变量名和方法名看起来一样——没有类似于$之类的前缀来区分他们。因此,一个诸如x的简单表达式既可以引用一个名为x的局部变量,也可以引用self对象的一个名为x的方法。为了消除这种二义性,Ruby将一个标识符当作局部变量来处理,只要它之前见到了对这个变量的赋值操作即可,即便这个赋值操作并没有执行也是如此。下面代码说明了这一点:.
class Ambiguous
def x; 1; end #A method named "x". Always returns 1
def test
puts x #No variable has been seen; refers to method above: prints 1
x = 0 if false
puts x #x is a variable, but has never been assigned to: prints nil
x = 2
puts x #prints 2
end
end