我想明白下面的代碼是如何工作的:紅寶石 - 需要幫助理解這個注入
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