有没有办法在没有 (*) splat 参数的情况下在 Ruby 中传递多个参数



我需要编写一个接受未知数量参数的方法(因此是 *splat),但它通过了yields_with_args规范。

代码:

def eval_block(*args, &block)
    raise "NO BLOCK GIVEN!" if block.nil?
       block.call(args)
end

该规范:

it "passes the arguments into the block" do
      expect do |block|
        eval_block(1, 2, 3, &block)
      end.to yield_with_args(1, 2, 3)
    end
end

它可以工作,但它产生 *splat 创建的数组:[1,2,3] vs 1,2,3 ,因此不会传递 rspec。有没有另一种方法可以通过 Ruby 中的方法传递多个参数?

替换

block.call(args)

block.call(*args)

Splat 有两个功能:在定义中收集数组的参数,以及在调用中将数组分发给参数。这两个是反向操作:如果你期望透明操作(三个参数进入,三个参数出去),你应该分发你收集的内容。

最新更新