Есть ли стандартный способ конвертировать Proc в метод в Ruby - PullRequest
1 голос
/ 25 февраля 2012

Есть ли способ сделать это в Ruby?:

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

Ответы [ 2 ]

7 голосов
/ 25 февраля 2012
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 голосов
/ 25 февраля 2012

Не думаю, что вы можете получить именно это, отчасти потому, что не существует простого способа получить имя переменной / символа, к которому вы привязываете.

Ближайшее совпадение ИМХО:

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: add[3,4],

или просто

add.call(3,4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...