我想创建一个可以动态添加方法并允许多个参数的类。
例如:
r = Robot.new
r.learn_maneuvering('turn') { |degree| puts "turning #{degree} degrees" }
r.turn 50 # => turning 50 degrees
r.turn 50, 60 # => turning 50 degrees # => turning 60 degrees
我的第一次尝试是:
def learn_maneuvering(name, &block)
define_singleton_method(name, &block)
end
但是,它只占一个参数..
然后我开始:
def learn_maneuvering(name, &block)
define_singleton_method(name) do |*args|
# to do
end
end
我相信这会循环直到所有参数都被正确使用? Anywho,我不知道如何将这些参数传递给给定的块。
答案 0 :(得分:6)
你很亲密:
def learn_maneuvering(name, &block)
define_singleton_method(name) do |*args|
args.each do |arg|
block.call(arg)
end
end
end
r = Robot.new
r.learn_maneuvering('turn') { |degree| puts "turning #{degree} degrees" }
r.turn 50, 60
打印:
转50度
转60度
但这真的是你想要的吗?这似乎只是在做
r.turn 50
r.turn 60
对我来说更有意义。