From: Yutaka HARA Date: 2009-08-19T23:57:07+09:00 Subject: [ruby-core:24982] [Feature #1961] Kernel#__dir__ Feature #1961: Kernel#__dir__ http://redmine.ruby-lang.org/issues/show/1961 Author: Yutaka HARA Status: Open, Priority: Normal = Proposal Kernel#__dir__ returns the value of File.dirname(__FILE__) According to the google code search, about 60% of uses of __FILE__ are of the form File.dirname(__FILE__). Ruby 1.9.2 provides require_relative for this problem; but File.dirname(__FILE__) is not always used for requiring ruby scripts, but also for reading data files. __dir__ helps these cases. (Note: my proposal does not include __dir_dir__ this time :-) It should be discussed in another threads) Related ticket: http://redmine.ruby-lang.org/issues/show/642 = Problem File.dirname(__FILE__) is frequently used and too long. = Analysis There are 222 uses of __FILE__ listed by the google code search, classified into these categories: (A) 30.6% (68) are used with require and File.dirname. In Ruby 1.9.2, this case is supported by require_relative. (B) 31.1% (69) are with File.dirname, but not with require. For example, reading data files of unit tests. (C) 21.6% (48) are the idiom, $0 == __FILE__. B is as many as A (and even more than C), so it is reasonable to add a shortcut for File.dirname(__FILE__) in addition to require_relative. * code: http://gist.github.com/170336 * result: http://route477.net/files/__file__.html = Solutions (1) add a toplevel constant __DIR__ pros: looks like __FILE__ cons: adding new keyword (2) add Kernel#__DIR__ pros: no new keyword cons: it should have a lower-case name (like 1.9's __method__), because it is not a constant but a method. (3) add Kernel#__dir__ pros: no new keyword, and it is clearer than (4) that it has some associations with __FILE__. (4) make __FILE__ to the default argument of File.dirname pros: no new keyword nor new method cons: it is not clear that 'File.dirname' is expanded to the path of directory of __FILE__. = Conclusion I think (3) (Kernel#__dir__) is the best. Thanks, -- yhara (Yutaka HARA) http://route477.net/ ---------------------------------------- http://redmine.ruby-lang.org