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