我想明白下面的代码是如何工作的:红宝石 - 需要帮助理解这个注入
def url
@url ||= {
"basename" => self.basename,
"output_ext" => self.output_ext,
}.inject("/:basename/") { |result, token|
result.gsub(/:#{token.first}/, token.last)
}.gsub(/\/\//, "/")
end
我知道它做什么;它以某种方式返回与位于服务器上目录的文件相对应的url。所以它返回类似这样的字符串:/path/to/my/file.html
据我所知,如果@url
已经有一个值,它将被返回,并且正确的||=
将被丢弃。我也明白,这开始创建两个元素的散列。
我也觉得我明白了最后的gsub;它用反斜杠代替反斜杠(我想是为了应付Windows服务器)。
令我惊讶的是inject
部分。我无法理解它。我之前使用过inject
,但这对我来说太过分了。我不明白each
是如何实现的,因为我不明白它的作用。
我对这个问题稍微修改了原始函数;原来来自this jekyll file。
干杯!
“的最后一个gsub;它用斜线替换反斜杠“ - 不,它在我看来像是用斜杠替换双斜线。 – Ken 2010-06-26 16:35:10
你说得对 - 感谢你指出了这一点。 – kikito 2010-06-26 18:01:58