是否可以在Ruby中定义带有可选参数的块?

我正在尝试动态定义调用一个带有options参数的函数函数
class MyClass
  ["hour","minute","second"].each do |interval|
    define_method "get_#{interval}" do |args|
      some_helper(interval,args)
    end
  end
  def some_helper(interval,options={})
    # Do something,with arguments
  end
end

我希望能够以这两种方式调用MyClass上的不同方法(使用和不使用可选参数):

mc = MyClass.new
mc.get_minute( :first_option => "foo",:second_option => "bar")
mc.get_minute  # This fails with: warning: multiple values for a block parameter (0 for 1)

在第二次拨打分钟时,我看到了这个警告:

warning: multiple values for a block parameter (0 for 1)

>有没有办法为“get_ *”方法编写块,以便不会出现此警告?
>我是否滥用define_method?

解决方法

您需要做的唯一更改是将args更改为* args. *表示args将包含块的可选参数数组.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...