为什么__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核心团队将是解决这个问题的正确方法。