在Ruby 2.0.0-p0中,引入了__dir__
变量,以便于访问当前正在执行的文件的目录。
__dir__
为大写时,为什么__FILE__
为小写?
答案 0 :(得分:53)
我认为这是因为__FILE__
是一个解析时常量,而__dir__
是一个函数并返回File.dirname(File.realpath(__FILE__))
有关详细信息,请参阅This discussion
答案 1 :(得分:29)
语言实现选择的相对优点超出了合理的Stack Overflow问题的范围。但是,这是一个很好的问题,因为它确定了语言中可能令人困惑的用例,并试图澄清两种语言元素之间的区别。
__FILE__
是关键字在Ruby 1.9中,__FILE__
是一个关键字。尽管它看起来像是在Object类上定义的方法,但Object#__FILE__的来源却说:
# File keywords.rb, line 68
def __FILE__
end
对2.0.0-p0中的源进行快速扫描没有找到keywords.rb文件,但是假设__FILE__
在语法上仍然是关键字。也许其他人可以指出您当前定义的位置。
__dir__
是方法Kernel#__dir__实际上是一种方法。您可以通过使用内核定义的方法来自行查看:
Kernel.methods.grep /__dir__/
# => [:__dir__]
__FILE__
既是关键字又是(某种)方法的事实是called out in a bug和一些bug-related commentary。还讨论了Ruby-Core Forum中命名惯例的各种利弊。
虽然答案可能有点令人不满意,但这是目前的状况。如果这是一个你强烈关注的语言设计问题,那么参与Ruby核心团队将是解决它的正确方法。