Dans Ruby 2.0.0-p0, le __dir__
La variable a été introduite pour un accès facile au répertoire du fichier en cours d'exécution.
Pourquoi est-ce __dir__
minuscule lorsque __FILE__
est en majuscule?
Je pense que c'est parce que __FILE__
Est une constante de temps d'analyse alors que __dir__
Est une fonction et renvoie File.dirname(File.realpath(__FILE__))
Pour plus de détails, voir Cette discussion
Les mérites relatifs des choix d'implémentation du langage sont en dehors de la portée d'une question raisonnable de dépassement de pile. Cependant, c'est une bonne question car elle identifie un cas d'utilisation potentiellement déroutant dans la langue et cherche à clarifier la distinction entre les deux éléments linguistiques.
__FILE__
est un mot cléDans Ruby 1.9, __FILE__
est un mot-clé. Même si cela ressemble à une méthode définie sur la classe Object, la source de Object #__ FILE __ dit:
# File keywords.rb, line 68
def __FILE__
end
Une analyse rapide de la source dans 2.0.0-p0 n'a pas révélé de fichier keywords.rb, mais on suppose que __FILE__
reste syntaxiquement un mot-clé. Peut-être que quelqu'un d'autre peut vous indiquer l'emplacement de la définition actuelle.
__dir__
est une méthodeKernel #__ dir __ est en fait une méthode. Vous pouvez le constater par vous-même en appliquant les méthodes définies par le noyau:
Kernel.methods.grep /__dir__/
# => [:__dir__]
Le fait que __FILE__
est à la fois un mot-clé et (en quelque sorte) une méthode est appelée dans un bug et un peu commentaire lié au bug . Il y a également eu une discussion sur les divers avantages et inconvénients de la convention de dénomination dans le Ruby-Core Forum .
Bien que la réponse puisse être un peu insatisfaisante, c'est la situation actuelle. S'il s'agit d'un problème de conception de langage qui vous tient à cœur, vous impliquer avec l'équipe principale de Ruby serait le bon moyen de le résoudre.