我有一個方法,並使用相同的名稱x
一個局部變量中優先使用方法:如何在一個局部變量
class A
def x; 5 end
end
x = 10
我想指的是方法x
不使用self.x
。例如,我想要:
A.new.instance_eval{x} # => 10
返回5
。那可能嗎?
我有一個方法,並使用相同的名稱x
一個局部變量中優先使用方法:如何在一個局部變量
class A
def x; 5 end
end
x = 10
我想指的是方法x
不使用self.x
。例如,我想要:
A.new.instance_eval{x} # => 10
返回5
。那可能嗎?
是,在幾個方面:
A.new.instance_eval{x()} # => 5
A.new.instance_eval{send(:x)} # => 5
如果只允許x
,這是不可能的。局部變量具有詞彙範圍,並且在含糊不清的情況下優先於方法。
對不起,是的,它是爲OP。我剛剛提出了評論。 –
有你想要的消息告訴紅寶石兩種方式發送,而不是一個局部變量:
A.new.instance_eval{ x() }
A.new.instance_eval{ self.x }
您也可以使用反射:
A.new.instance_eval{ public_send(:x) }
A.new.instance_eval{ method(:x).() }
Method
器具to_proc
,#2也可被寫爲A.new.instance_eval(&method(:x))
最乾淨的解決辦法是重命名局部變量。
'x'是一個* local *變量。 [全局變量](http://ruby-doc.org/core-2.3.0/doc/syntax/assignment_rdoc.html#label-Global+Variables)以'$'開頭。 – Stefan
呵呵,我雖然在程序主體中指定了一個變量是全局變量,但並不知道有一個實際的全局變量修飾符 – Coirotomas
self.x可能是表達您調用該方法的最乾淨和最清晰的方式。你爲什麼想要以不同的方式表達? –