2

不明な数の引数 (したがって *splat) を取るが、yields_with_args仕様を渡すメソッドを作成する必要があります。

コード:

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

rspec:

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のメソッドを介して複数の引数を渡す別の方法はありますか?

4

1 に答える 1

6

交換

block.call(args)

block.call(*args)

Splat には 2 つの機能があります。定義時に配列に引数を収集する機能と、呼び出し時に配列を引数に分配する機能です。この 2 つは逆の操作です。透過的な操作 (3 つの引数が入力され、3 つの引数が出力される) を期待する場合は、収集したものを配布する必要があります。

于 2016-03-07T02:32:22.520 に答える