有没有一种标准的方法将Proc转换为Ruby中的方法

时间:2012-02-25 00:31:33

标签: ruby

有没有办法在Ruby中做到这一点?:

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

2 个答案:

答案 0 :(得分:7)

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

但是,请注意,您可以像方法一样调用lambda,但使用方括号:

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

答案 1 :(得分: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)