2013-03-22 42 views
-1

運行通過PROC用一個類的實例裏面PARAMS這個例子是有點做作,但它從一個測試是如此之類的只是作品這種方式,將幫助我弄清楚如何在實際的庫使用。我有一個lambda,像這樣定義:紅寶石

l = lambda { |v| process(v) } 

我想把它傳遞給一個對象,並在該對象的上下文中運行該過程。該物體可能是這樣的:

class LambdaRunner 
    def process(v) 
    puts v 
    end 
    def run(proc) 
    # code to run proc in the context of the object 
    end 
end 

我熟悉使用instance_eval的運行PROC的解決方案。

instance_eval(&proc) 

但是這不起作用,因爲我需要傳遞一個值給proc。我管理的東西像一個可行的解決方案,但它感覺很不好,而且容易出錯。

self.class.class_eval do 
    define_method(:runner, &proc) 
end 
runner('hi from lambda runner') 

所有其他方法都取得了undefined method process

回答

1

instance_exec的文檔(這是回遷到1.8.7)。假設你的PROC需要一個參數|v|,你可能會在LambdaRunner像這樣結束了。

 
    def run(proc) 
    instance_exec(v_value, &proc) 
    end 

順便說一句,在Ruby中的版本沒有#instance_exec,你的黑客基本上是實現它的唯一途徑。對於那些沒有後端方法的老款紅寶石來說,這就是我的做法。