Rack :: Builder'to_app'方法理解

时间:2013-05-06 08:31:01

标签: ruby rack

我看到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]进行数组订阅。

1 个答案:

答案 0 :(得分:2)

在这种情况下,[]不是数组访问权限。这是调用lambda或proc的一种方法,相当于e.call(a)。 (参见documentation。)如果查看use method@use变量是一组lambdas。此代码以相反的顺序运行每个中间件(和/或映射),并以app作为参数调用每个lambda。这就是他们如何逐步构建app。