如果ruby中一个局部变量名和私有方法名同名的话,默认该名称被解释为变量而不是方法:
x=10;
def x;puts "what?" end
当你输入x实际不能执行x方法。解释器只把x解释为变量。而且undef只能对方法而不能对变量下手,所以undef x仍然不行,变量还在那里!一种解决方法是将x方法转换为一个method,然后调用:
x_f = method(:x)
x_f[]
或者还有一种方法,就是方法别名!你可以指定x的一个别名,这时x肯定会解释为方法:
alias new_x x
new_x
你当然可以吧方法转成method然后再转成proc,最后调用,不过这似乎多此一举鸟:
def call_x(&proc)
proc.call
end
call_x &x_f
哦鸟!ruby非常变通的,神马事都有几种解决方法。