我知道我可以使用 动态定义类上的方法define_method
,并且我可以使用块的数量来指定此方法采用的参数。
我想动态定义一个同时接受可选参数和块的方法。在 Ruby 1.9 中,这很容易,因为现在允许将块传递给块。
不幸的是,Ruby 1.8 不允许这样做,因此以下内容将不起作用:
#Ruby 1.8
class X
define_method :foo do |bar, &baz|
puts bar
baz.call if block_given?
end
end
x = X.new
x.foo("foo") { puts "called!"} #=> LocalJumpError: no block given
将显式替换为block.call
也yield
不能解决问题。
不幸的是,升级到 Ruby 1.9 对我来说不是一个选择。这是一个棘手的问题,还是有解决办法?