如何定义接收可变参数的方法生成

时间:2018-09-13 20:13:04

标签: ruby metaprogramming

在ruby类定义中,我想定义一个方法生成器。对我们说,我要生成的每种方法的符号和参数数量都不同。所以,我有这样的东西:

def self.my_define_service1(name) # generate for 1 parameter
    define_method(name) do |p1|
      # basic stuff
      call(name.intern, p1)
    end
end

def self.my_define_service2(name) # generate for 1 parameter
    define_method(name) do |p1, p2| 
      # basic stuff
      call(name.intern, p1,p2)
    end
end

# and so on ... many definitions as the number of parameters I have

call是一种分配器的方法,它接收符号名称和参数。

我的问题是:是否可以只编写一个生成器?像这样

def self.my_define_service(name, *args)
    define_method(name) do |args| # <-- how to do here?
      # basic stuff
      call(name.intern, *args)
    end
end

如果答案是肯定的,怎么办?

1 个答案:

答案 0 :(得分:0)

尝试:

def self.my_define_service(name, *args)
  define_method(name) do |*args|
    # basic stuff
    call(name.intern, *args)
  end
end