0

Rails のソース コードには、Rails サーバーを起動するこの commitによって追加された次の部分が含まれています。

  Rails::Server.new.tap do |server|
    # We need to require application after the server sets environment,
    # otherwise the --environment option given to the server won't propagate.
    require APP_PATH
    Dir.chdir(Rails.application.root)
    server.start
  end

なぜメソッドtapが使われるのか不思議です。私の理解でtapは、メソッドをチェーンするように設計されています。ただし、ここでは何も連鎖していません。また、私の理解では、server.start. だから、それは私にはあまり意味がありません。

4

2 に答える 2

2

質問に完全に答えるかどうかはわかりませんが、一般的に、これのポイントは、ファイル内の古いスコープに対して「謎の」ローカル変数を定義するだけではないと思います。代わりに、ブロックを使用.tapしてローカル変数に明示的なスコープを与えることができます (ローカル変数はブロックの最後でメモリから削除されるため)。したがって、彼らはここでスコープを精神的に定義しようとしているだけかもしれません (つまり、「この変数は、ここのこのコードにのみ必要です」)。

更新

これについて私がしばらく前に読んだ記事は次のとおりです

于 2013-09-02T01:44:19.197 に答える
2

それが理由かどうかはわかりませんが、変数serverをそのブロックのローカルとして制限します。serverこれは、コードの残りの部分ではまったく参照されていないため、コードの機能には影響しませんが、コードを読む人には役立ちます。

server = Rails::Server.new
require APP_PATH
Dir.chdir(Rails.application.root)
server.start

同じセマンティクスを持ちますがserver、範囲内に残されます。これにより、リーダーはコードの残りの部分を調べて、他に を使用していないかどうかを確認できますserver。元の例では、これらの 3 行だけが を使用していることがわかります。それだけserverです。

于 2013-09-02T01:45:05.680 に答える