3

tapメソッドは並行してどのように機能しますか?私がそうするなら、私はそれを恐れる必要がありますか?

some_object.tap { |o|
  # time-consuming operation 1
}.tap { |o|
  # time-consuming operation 2
}

それは、現在または将来、Rubyはこれらの操作を同時に実行しようとするのでしょうか。あなたが知っている、#tap危険に聞こえます。

ブロックが順番に実行されることが保証されてい#tapますか(もちろん、ブロック内で何か異常なことをしない限り)?

4

2 に答える 2

11

Tap はブロックを同時に実行するのではなく、順番に実行します。同時実行性の問題がないため、同時実行性の問題について心配する必要はありません。

のソースは次のtapとおりです。

VALUE
rb_obj_tap(VALUE obj)
{
    rb_yield(obj);
    return obj;
}

yieldしたがって、最初にブロック ( ) を呼び出し、その後でのみ元のオブジェクトを返すことがわかります。同時実行性はありません。

于 2012-10-26T20:55:50.787 に答える
5

心配する必要はありません。

Ruby の実行は、明示的に並列化するための何か (スレッドの作成など) を行わない限り、順次実行されます。

于 2012-10-26T20:55:20.860 に答える