请考虑Innate中的以下背景:
# Default application for Innate
def innate(app = Innate::DynaMap, options = Innate.options)
roots, publics = options[:roots], options[:publics]
joined = roots.map{|root| publics.map{|public| ::File.join(root, public)}}
apps = joined.flatten.map{|pr| Rack::File.new(pr) }
apps << Current.new(Route.new(app), Rewrite.new(app))
cascade(*apps)
end
我的第一个问题与上面的以下行有关:
joined = roots.map{|root| publics.map{|public| ::File.join(root, public)}}
这条线在做什么?
1 - 我的猜测是它需要一个文件名并将其添加到一个数组caled publics然后将其包装在另一个名为roots的数组中。这是正确的吗?
我的第二个问题与此有关:
apps = joined.flatten.map{|pr| Rack::File.new(pr) }
apps << Current.new(Route.new(app), Rewrite.new(app))
2 - 这里“扁平化”的目的是什么?
答案 0 :(得分:2)
看起来它需要一个名为roots
的数组(或类似数组)的东西,并且对于它的每个元素,它都会对publics
的每个元素进行处理:
因此,如果roots
为["/a", "/b"]
且公开为["alpha", "beta", "gamma"]
,则会:
[["/a/alpha", "/a/beta", "/a/gamma"], ["/b/alpha", "/b/beta", "/b/gamma"]]
现在我们可以看到为什么需要压扁它。 Flatten将组件数组拉入一个数组。所以,joined.flatten
会:
["/a/alpha", "/a/beta", "/a/gamma", "/b/alpha", "/b/beta", "/b/gamma"]