为什么__FILE__大写和__dir__小写?

时间:2013-03-03 20:50:06

标签: ruby syntax language-implementation

在Ruby 2.0.0-p0中,引入了__dir__变量,以便于访问当前正在执行的文件的目录。

__dir__为大写时,为什么__FILE__为小写?

2 个答案:

答案 0 :(得分:53)

我认为这是因为__FILE__是一个解析时常量,而__dir__是一个函数并返回File.dirname(File.realpath(__FILE__))

有关详细信息,请参阅This discussion

答案 1 :(得分:29)

TL; DR

语言实现选择的相对优点超出了合理的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核心团队将是解决它的正确方法。