为什么__FILE__大写和__dir__小写?

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

为什么当__FILE__是大写时__dir__小写?

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

有关更多详细信息,请参阅此讨论

TL; DR

语言实现select的相对优点不在合理的Stack Overflow问题的范围之内。 然而,这是一个很好的问题,因为它确定了语言中一个潜在的混淆用例,并试图澄清这两种语言元素之间的区别。

关键字,方法和关键字看起来像方法

__FILE__是一个关键字

在Ruby 1.9中, __FILE__是一个关键字。 即使它看起来像在Object类上定义的方法, Object #__ FILE__的源代码也是这样说的:

 # File keywords.rb, line 68 def __FILE__ end 

在2.0.0-p0中对源代码的快速扫描没有find关键字__FILE__文件,但是我们假定__FILE__语法上仍然是一个关键字。 也许别人可以把你指向当前定义的位置。

__dir__是一个方法

内核#__ dir__实际上是一种方法。 你可以通过刷新内核定义的方法来看到这一点:

 Kernel.methods.grep /__dir__/ # => [:__dir__] 

错误和讨论

__FILE__既是关键字也是(某种)方法的事实在bug和一些与bug有关的注释中被调用 。 还讨论了Ruby-Core论坛中命名约定的各种利弊。

虽然答案可能有点不尽人意,但这是目前的状况。 如果您认为这是一个语言devise问题,那么joinRuby核心团队将是解决这个问题的正确方法。