2012-02-25 71 views
1

的標準方法是有某種方式在Ruby中做到這一點?:是否有一個Proc轉換爲一個方法在Ruby中

add = lambda { |x, y| x + y } 
add_m = add.to_method 
add_m(3, 4) 
+0

你的意思,而不是'add_m [3, 4]'你想/需要使用圓括號? – Phrogz 2012-02-25 00:36:11

+0

正好。我想'add_m(3,4)'。 – 2012-02-25 00:40:53

回答

7
add = lambda { |x, y| x + y } 
define_singleton_method(:add_m,&add) 
p add_m(3,4) 
#=> 7 

但是請注意,你可以調用像一個拉姆達的方法,但用方括號:

add = lambda { |x, y| x + y } 
p add[3,4] 
#=> 7 
+0

有趣。如果沒有標準的方法,我可能會使用這個。 – 2012-02-25 00:41:33

+0

@VladtheImpala使用'define_singleton_method'查看我修改後的答案。 – Phrogz 2012-02-25 00:42:42

+2

'add。(3,4)'也可以,假設Ruby(1.9.0+)的版本較新。 – 2012-02-25 01:45:45

0

不要以爲你可以得到正是這樣,部分原因是因爲沒有簡單的方法來獲取變量/符號要綁定到的名稱。

最近的比賽恕我直言:

class Proc 
    def to_method(m) 
    p=self 
    Object.class_eval {define_method(m, &p)}  
    end; 
end 

add = lambda { |x, y| x + y } 
add.to_method(:add_m) 
add_m(3, 4) 

如果這不是你想要添加的方法,你應該在課堂上傳遞過的對象。

如果語法沒有太大的關係,你可以用Phrogz」建議去:加[3,4],

或只是

add.call(3,4) 
相關問題