如何使用do和end定义_method

时间:2015-09-07 10:55:03

标签: ruby metaprogramming

我正在编写一个使用define_method的程序,但我不明白如何定义这样的方法:

def mymethod(variable) do
    puts variable
    puts yield
end

可以通过以下方式调用:

mymethod("hi") do
    # this is yield
end

2 个答案:

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

答案 1 :(得分:-2)

define_method :my_method do |str, &block|
  # Do something here
  yield  # or block.call
  # Do something here
end