Je voudrais comprendre comment le code suivant fonctionne:Ruby - ont besoin d'aide pour comprendre ce Injecter
def url
@url ||= {
"basename" => self.basename,
"output_ext" => self.output_ext,
}.inject("/:basename/") { |result, token|
result.gsub(/:#{token.first}/, token.last)
}.gsub(/\/\//, "/")
end
Je sais ce qu'il fait; en quelque sorte, il renvoie l'URL correspondant à un fichier situé o un dir sur un serveur. Donc, il retourne des chaînes semblables à ceci:
Je comprends que si @url
a déjà une valeur, il sera retourné et le droit ||=
sera rejeté. Je comprends aussi que cela commence à créer un hachage de deux éléments. Je pense aussi que je comprends le dernier gsub; il remplace les barres obliques inverses par des barres obliques (pour faire face aux serveurs Windows, je suppose).
Ce qui m'étonne est la partie inject
. Je ne suis pas capable de le comprendre. J'ai utilisé inject
avant, mais celui-ci est trop pour moi. Je ne vois pas comment cela se fait avec un each
, puisque je ne comprends pas ce que ça fait. J'ai modifié légèrement la fonction d'origine pour cette question; l'original provient de this jekyll file.
À la votre!
« la dernier gsub, il remplace les barres obliques inversées par des barres obliques "- non, il me semble qu'il remplace les doubles barres obliques par des barres obliques. – Ken
Vous avez raison - merci de le signaler. – kikito