2010-05-10 5 views

Répondre

5

Dans le first patch sur Rails ticket #4558:

options.fetch(:alt, File.basename(src, '.*').capitalize) 

Cette ligne exécute le nom de base et capitalisent fonctions et passe ensuite le résultat en Hash#fetch peu importe si une valeur pour: alt existe déjà dans le hachage d'options.

Dans le updated patch:

options.fetch(:alt) { File.basename(src, '.*').capitalize } 

Le même nom de base/code est capitalise uniquement exécutée lorsque Hash#fetch a besoin de la valeur par défaut (à savoir quand la touche: alt n'existe pas dans le hachage d'options). Cela signifie que le calcul (éventuellement coûteux) de la valeur par défaut peut être ignoré si ce n'est pas nécessaire.

Voir la documentation au Hash#fetch pour plus de détails.

+0

I Je pensais que c'était le cas mais je suppose que mon test n'était pas bon. Comme le résultat était le même dans les deux cas, je me suis senti confus. Merci. –

1

Je ne sais pas ce que Rails de canard poinçonnage a été fait à Hash#fetch, mais avec des objets Plain Old Ruby, je l'utilise plutôt que Hash#[] parce que quand je demande quelque chose et ce n'est pas disponible, je veux savoir à ce sujet . Ceci est appelé « défaut précoce » (ou « Crashing précoce » dans Le programmeur deList of Tips Pragmatique)

Questions connexes