2015-09-07 2 views

ответ

3

Вы не можете использовать yield. Вы должны получить его как объект proc.

define_method(:mymethod) do |variable, &block| 
    puts variable 
    puts block.call 
end 

mymethod("foo"){"bar"} 
# foo 
# bar 

mymethod("foo") do "bar" end 
# foo 
# bar 
+0

Почему я не могу это сделать? – thesecretmaster

+0

@thesecretmaster Поскольку 'yield' будет интерпретироваться с лексической областью. – sawa

+0

Также этот метод нельзя назвать похожим на 'my_method (" foo "); "бар"; end' – thesecretmaster

-2
define_method :my_method do |str, &block| 
    # Do something here 
    yield # or block.call 
    # Do something here 
end 
Смежные вопросы