将数组的元素作为方法调用的参数发送

我有一个接受splat运算符的方法:

def hello(foo, *bar) #... do some stuff end 

我有一个可变长度的数组,我想发送到这个hello方法:

 arr1 = ['baz', 'stuff'] arr2 = ['ding', 'dong', 'dang'] 

我想用arr1和arr2作为该方法的参数调用该方法,但我不断被挂起,因为* bar被解释为数组而不是单个参数。 为了让事情变得更有趣,我根本无法更改hello方法。

我正在寻找类似于这个问题但在ruby中的东西。

尝试这样称呼它

 hello(arr1, *arr2) 

这是irb中的一个贯穿

 irb(main):002:0> def hello(foo, *bar) irb(main):003:1> puts foo.inspect irb(main):004:1> puts bar.inspect irb(main):005:1> end => nil irb(main):006:0> arr1 = ['baz', 'stuff'] => ["baz", "stuff"] irb(main):007:0> arr2 = ['ding', 'dong', 'dang'] => ["ding", "dong", "dang"] irb(main):008:0> hello(arr1, arr2) ["baz", "stuff"] [["ding", "dong", "dang"]] => nil irb(main):009:0> hello(arr1, *arr2) ["baz", "stuff"] ["ding", "dong", "dang"] => nil 

通过将*添加到第二个数组,它将它们视为一个数组而不是一个数组的数组 ,这是你想要的我认为

干得好:

 hello('Something', *(arr1 + arr2)) 

这将组合arr1arr2数组,并将它们从第二个参数传递到方法。

例:

 >> def hello(str, *args) >> puts str >> args.each do |arg| ?> puts 'Splat: ' + arg >> end >> end => nil >> hello('Hello', *(['programming'] + ['is', 'fun'])) Hello Splat: programming Splat: is Splat: fun => ["programming", "is", "fun"] 

方法的最后一个参数可以在前面加一个星号( * ),这表示可以将更多参数传递给该函数。 收集这些参数并创建一个数组。

由于最后一个参数被收集到一个数组中,你需要使用*运算符来表明你确实正在向该方法发送一个数组,并且它不应该将参数包装在另一个数组中。