gpt4 book ai didi

ruby - 如何允许将多个参数传递给 define_singleton_method

转载 作者:数据小太阳 更新时间:2023-10-29 07:50:34 26 4
gpt4 key购买 nike

我想创建一个可以动态添加方法并允许多个参数的类。

例如:

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

我相信这会循环直到所有参数都被使用,对吗?无论如何,我不确定如何将这些参数传递给给定的 block 。

最佳答案

你很接近:

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

打印:

turning 50 degrees
turning 60 degrees

但这真的是你想要的吗?好像只是在做

r.turn 50
r.turn 60

对我来说更有意义。

关于ruby - 如何允许将多个参数传递给 define_singleton_method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12118520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com