3

Railscast #151 を見ました。このビデオでは、Rack のスニペットが紹介されています。モジュールに対応していRack::Builderます。to_appメソッドに何かが欠けています:

 def to_app
  app = @map ? generate_map(@run, @map) : @run
  fail "missing run or map statement" unless app
  @use.reverse.inject(app) { |a,e| e[a] }
end

誰かがメソッドの最後の行とそれが実際に何をするかを説明できますか? injectアキュムレータ変数と要素変数を使用していることは知っています。しかし、なぜ で配列サブスクリプションを実行できるのかわかりませんe[a]

4

1 に答える 1

3

この場合、[]は配列アクセスではありません。と同等のラムダまたはプロシージャを呼び出す 1 つの方法e.call(a)です。(ドキュメントを参照してください。)useメソッドを見ると、@use変数はラムダの配列です。このコードは、各ミドルウェア (および/またはマッピング) を逆の順序で実行し、アプリを引数として各ラムダを呼び出します。これは、アプリを少しずつ構築する方法です。

于 2013-05-06T08:46:55.727 に答える