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