Bug #7975

Why __dir__, not __DIR__

Added by yimutang (Joey Zhou) over 4 years ago. Updated over 4 years ago.

Target version:


There's a FILE in Ruby 1.x, no file
Why dir in Ruby 2.0 is downcase?

It's not consistent.

Related issues

Duplicates Ruby trunk - Feature #3346: __DIR__ revisted Closed 05/26/2010


#1 [ruby-core:52972] Updated by zzak (Zachary Scott) over 4 years ago

  • Status changed from Open to Rejected

see #3346

#2 [ruby-core:52976] Updated by yhara (Yutaka HARA) over 4 years ago

That is becuase dir is a method, whereas FILE is not.

$ ruby -ve 'p Kernel.methods'
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin12.2.1]
[:sprintf, :format, :Integer, :Float, :String, :Array, :Hash, :warn, :raise, :fail,
:global_variables, :method, :callee, :dir, :eval, .....

dir is prefered to avoid adding a new keyword (see #1961.)

#3 [ruby-core:52993] Updated by wardrop (Tom Wardrop) over 4 years ago

We did not come to any sort of resolution to the naming inconsistency between dir/method and FILE/LINE in any of those mentioned issues.

Should we not add file and line as methods, and perhaps deprecate the keywords FILE and LINE. This would keep it consistant with all the other double-underscore methods. To most developers who perhaps do not know Ruby as intricately as most of the people on this issue tracker, the inconsistency between dir and FILE is not just confusing by name, but the fact that one is a method and one isn't, is doubly confusing. Definitely not principle of least surprise.

This needs to be addressed in my opinion, either through deprecation of FILE and LINE, or by keeping those keywords and simply creating Kernel method equivalents for the sack of a consistant API.

While on the topic, someone also suggested in one of those previous issues, to give dir an optional join argument, so you could do something like this:

(({dir('somefile.txt') # => /Users/admin/somefile.txt}))

I'd predict that at least 90% of use cases for dir will involve joining it to another path or filename. I can't see any harm in adding this. The naming inconstancies are my main concern however.

Also available in: Atom PDF