次のコードがどのように機能するかを理解したいと思います。
def url
@url ||= {
"basename" => self.basename,
"output_ext" => self.output_ext,
}.inject("/:basename/") { |result, token|
result.gsub(/:#{token.first}/, token.last)
}.gsub(/\/\//, "/")
end
私はそれが何をするか知っています。どういうわけか、サーバー上の oa dir にあるファイルに対応する URL を返します。したがって、次のような文字列が返されます。/path/to/my/file.html
@url
すでに値を持っている場合は、それが返され、権利||=
が破棄されることを理解しています。また、これにより 2 つの要素のハッシュが作成されることも理解しています。
また、最後の gsub も理解していると思います。バックスラッシュをスラッシュに置き換えます(Windowsサーバーに対処するためだと思います)。
驚いたのはそのinject
部分です。私はそれを理解することができません。以前から使ってinject
いましたが、これは私には多すぎます。私はそれが何をするのか理解していないので、これが でどのように行われるのかeach
わかりません。
この質問のために元の関数を少し変更しました。オリジナルはこのjekyllファイルから来ています。
乾杯!