我看到了火车站151。在这个视频中,展示了一个机架的片段。它对应于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]订阅数组。

最佳答案

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

关于ruby - Rack::Builder'to_app'方法理解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16394863/

10-14 15:49
查看更多