如何定义接收可变参数的方法生成
How define a method generation receiving variadic arguments
在 ruby class 定义中,我想定义一个方法生成器。假设我要生成的每个方法在符号和参数数量上都不同。所以,我有这样的东西:
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
如果答案是肯定的,怎么办?
试试:
def self.my_define_service(name, *args)
define_method(name) do |*args|
# basic stuff
call(name.intern, *args)
end
end
使用 eval
更容易:
def self.my_define_service(name, *args)
pars_list = args.join ', '
d = %{
def #{name}(#{pars_list})
call(':#{name}', #{pars_list})
end
}
eval d
end
在 ruby class 定义中,我想定义一个方法生成器。假设我要生成的每个方法在符号和参数数量上都不同。所以,我有这样的东西:
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
如果答案是肯定的,怎么办?
试试:
def self.my_define_service(name, *args)
define_method(name) do |*args|
# basic stuff
call(name.intern, *args)
end
end
使用 eval
更容易:
def self.my_define_service(name, *args)
pars_list = args.join ', '
d = %{
def #{name}(#{pars_list})
call(':#{name}', #{pars_list})
end
}
eval d
end