我看到了火车站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/