69 votes

Pourquoi __FILE__ est-il en majuscule et __dir__ en minuscule?

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

Pourquoi __dir__ minuscule alors que __FILE__ est en majuscule?

71voto

Intrepidd Points 6554

Je pense que cela est dû au fait 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

38voto

CodeGnome Points 25402

TL; DR

Les mérites relatifs de la langue, de la mise en œuvre des choix sont à l'extérieur de la portée d'une raisonnable de Débordement de Pile question. Cependant, c'est une bonne question parce qu'il identifie un risque de porter à confusion cas d'utilisation dans la langue et cherche à clarifier la distinction entre les deux éléments de la langue.

Mots-clés, les Méthodes et les mots clés Qui ressemblent à des Méthodes

__FILE__ est un mot-Clé

En Ruby 1.9, __FILE__ est un mot-clé. Même s'il ressemble à une méthode définie sur la classe de l'Objet, la source de l'Objet#__FILE__ , dit:

# File keywords.rb, line 68
def __FILE__
end

Une analyse rapide de la source dans 2.0.0-p0 n'est pas un des mots-clés.rb fichier, mais on suppose qu' __FILE__ syntaxiquement reste un mot-clé. Peut-être quelqu'un d'autre peut vous aider à trouver l'emplacement de la définition actuelle.

__dir__ est une Méthode

Noyau#__dir__ est en fait une méthode. Vous pouvez constater vous-même en grepping le Noyau est défini méthodes:

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

Des Bugs et des Discussions

Le fait qu' __FILE__ est à la fois un mot-clé et (un peu) une méthode est appelée dans un bug et certains bug lié commentaire. Il y avait aussi la discussion sur les avantages et les inconvénients de la convention de nommage dans le Rubis de Base du Forum.

Même si la réponse peut être un peu insatisfaisant, c'est l'état actuel des choses. Si c'est un problème de conception de la langue vous vous sentez fortement sur, avec le Rubis de l'équipe de base serait la bonne façon de l'aborder.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X