In Ruby 2.0.0-p0, the __dir__
variable was introduced for easy access to the directory of the file currently being executed.
Why is __dir__
lowercase when __FILE__
is uppercase?
I think that is because __FILE__
is a parse-time constant whereas __dir__
is a function and returns File.dirname(File.realpath(__FILE__))
For more details, see This discussion
The relative merits of language implementation choices are outside the scope of a reasonable Stack Overflow question. However, this is a good question because it identifies a potentially confusing use case in the language and seeks to clarify the distinction between the two language elements.
__FILE__
is a KeywordIn Ruby 1.9, __FILE__
is a keyword. Even though it looks like a method defined on the Object class, the source for Object#__FILE__ says:
# File keywords.rb, line 68 def __FILE__ end
A quick scan of the source in 2.0.0-p0 didn't turn up a keywords.rb file, but one assumes that __FILE__
syntactically remains a keyword. Perhaps someone else can point you to the location of the current definition.
__dir__
is a MethodKernel#__dir__ is actually a method. You can see this for yourself by grepping the Kernel's defined methods:
Kernel.methods.grep /__dir__/ # => [:__dir__]
The fact that __FILE__
is both a keyword and (sort of) a method is called out in a bug and some bug-related commentary. There was also discussion of the various pros and cons of the naming convention in the Ruby-Core Forum.
While the answer may be a bit unsatisfactory, that's the current state of affairs. If it's a language design issue you feel strongly about, getting involved with the Ruby core team would be the proper way to address it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With