4

このコード スニペットは、plataformecs gem simple_form の「カスタム入力の追加」に関する wiki セクションからのものです。

out << template.image_tag(object.send(attribute_name).tap {|o| break o.send(version) if version}.send('url'))

問題は、.tap {} の後のコード ブロックが何を意味するかということです。具体的には、私には奇妙に見える最初の「休憩」です。

4

3 に答える 3

12

break argumentをブロック内で使用すると、ブロックは を返しargumentます。デフォルトでtapは、与えられたものと同じオブジェクトを返しますが、ブレークにより代わりにo.send(version) if version評価されたものを返します。

于 2013-07-19T22:41:01.553 に答える
1

ドキュメントから:

The break terminates a method with an associated block 
if called within the block.

tapしたがって、コードの意味は、ある条件での値を変更することです。

  • バージョンが true の場合break、次のチェーンに の結果がもたらされo.send(version)ます。
  • それ以外の場合は、 の着信値のみがもたらされますtap
于 2013-07-19T22:37:21.090 に答える