I want to create a class that can add methods dynamically and allow multiple parameters.
For example:
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
My first attempt was this:
def learn_maneuvering(name, &block)
define_singleton_method(name, &block)
end
However, it only accounts for one parameter..
I then started with:
def learn_maneuvering(name, &block)
define_singleton_method(name) do |*args|
# to do
end
end
I believe this will loop until all arguments are used right? Anywho, I am not sure how to pass these arguments to the given block.
You're close:
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
prints:
turning 50 degrees
turning 60 degrees
But is this really what you want? It seems like just doing
r.turn 50
r.turn 60
makes more sense to me.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With