2010-06-28 50 views
3

可以說我有在最高級別紅寶石拉姆達方面

callable = lambda {"#{hi}"} 

以下紅寶石定義和假設後來我創建一個對象稱爲temp,有一個叫hi方法。現在我想要在temp的範圍內撥打callable。我曾嘗試做

temp.instance_eval do callable.call end 

但是這給我的錯誤「NameError: undefined local variable or method 'hi' for main:Object」。我想知道是否有任何方法將callable的上下文重新綁定到temp,以便我不會收到錯誤消息?我知道我可以在main:Object上定義method_missing,並將所有方法調用重新路由到temp,但是這看起來像是太大的方法來實現我想要的。

回答

6

你正在尋找的代碼是

temp.instance_eval(&callable) 
+0

能否請您闡述一下temp.instance_eval(贖回)之間'的區別'和'temp.instance_eval做callable.call end'。在我看來,任何一個人都應該工作,但後者不是出於某種原因。 – davidk01 2010-06-28 16:07:13

+0

@ davidk01:b/c一個Proc通常使用它定義的上下文。 instance_eval強制給定的過程使用調用對象的上下文,但不會遞歸地這樣做(所以在該過程中調用的過程不會上下文移位)。 – rampion 2010-06-28 17:21:00

+0

@rampion:你所說的沒有意義,因爲'&callable'也是一個proc,它確實得到了上下文轉換,並且當我們使用'instance_eval(&callable)'時,它實際上可以正常工作' – davidk01 2010-06-28 18:33:50