gpt4 book ai didi

Ruby 以编程方式调用方法,参数数量可变

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

我正在尝试做类似的事情:

def foo(mode= :serial)

if (mode == :serial) then
self.send(:bar, "one_type")
else
self.send(:bar,"second_type",:T5)
end
end

我显然可以这样打出来。

但我最近尝试将其扩展为包含第二个函数,如下所示:

def foo(mode= :serial)

if (mode == :serial) then
self.send(:bar, "one_type")
self.send(:foobar, "one_type",20)
else
self.send(:bar,"second_type",:T5)
self.send(:foobar, "one_type",20,:T5)
end
end

我仍然可以按原样继续,但我心想,这里有一个模式,我应该将参数抽象到另一层并使它更简单。

所以我想做的是这样的:

arg_arr   = [:bar, "one_type"]
arg_arr_2 = [:foobar, "one_type", 20]
if (mode == :serial) then
self.send(arg_arr)
self.send(arg_arr_2)
else
arg_arr << :T5
arg_arr2 << :T5
self.send(arg_arr)
self.send(arg_arr2 )
end

我尝试了一些涉及 .each、.inspect 的其他想法,但没有任何效果(通常的错误是无法将数组转换为字符串,我猜这是指它将数组视为整个函数名)。如果我明确地说“使用数组元素 [0] 、 [1] 等,我可以做到这一点,但这看起来很浪费。

有没有一种方法可以在不编写硬编码为参数数量的代码的情况下实现这一点?

最佳答案

试试这个

def foo(a, b)
puts a
puts b
end

array = ['bar', 'qux']
send(:foo, *array) # using send
foo(*array) # using the method name

同时打印

bar
qux

splat 运算符* 打包或解包一个数组。

关于Ruby 以编程方式调用方法,参数数量可变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41585621/

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