Pourquoi __FILE__ majuscule et __dir__ minuscule?

Dans Ruby 2.0.0-p0, la variable __dir__ été introduite pour faciliter l’access au répertoire du fichier en cours d’exécution.

Pourquoi __dir__ est- __dir__ minuscule lorsque __FILE__ est en majuscule?

Je pense que c’est parce que __FILE__ est une constante de temps d’parsing alors que __dir__ est une fonction et renvoie File.dirname(File.realpath(__FILE__))

Pour plus de détails, voir cette discussion

TL; DR

Les avantages relatifs des choix d’implémentation de la langue ne relèvent pas d’une question raisonnable de dépassement de capacité de la stack. 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.

Mots-clés, méthodes et mots-clés qui ressemblent à des méthodes

__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__ indique:

 # File keywords.rb, line 68 def __FILE__ end 

Une parsing rapide de la source dans 2.0.0-p0 n’a pas __FILE__ un fichier keywords.rb, mais on suppose que __FILE__ rest syntaxiquement un mot clé. Quelqu’un d’autre peut peut-être vous indiquer l’emplacement de la définition actuelle.

__dir__ est une méthode

Le kernel #__ dir__ est en fait une méthode. Vous pouvez le constater vous-même en utilisant les méthodes définies par le kernel:

 Kernel.methods.grep /__dir__/ # => [:__dir__] 

Bugs et discussions

Le fait que __FILE__ soit à la fois un mot-clé et (en quelque sorte) une méthode est appelé dans un bogue et dans certains commentaires relatifs aux bogues . Il y a également eu une discussion sur les différents avantages et inconvénients de la convention de dénomination dans le forum Ruby-Core .

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 linguistique, l’implication de l’équipe principale de Ruby est la solution idéale.