【问题标题】:Why is __FILE__ uppercase and __dir__ lowercase?为什么 __FILE__ 大写而 __dir__ 小写?
【发布时间】:2013-02-17 21:36:18
【问题描述】:

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

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

【问题讨论】:

标签: ruby syntax language-implementation


【解决方案1】:

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

更多详情请见This discussion

【讨论】:

  • 这是我觉得很少有的关于红宝石的令人讨厌的事情之一。哦,好吧。
  • 链接已过期。
【解决方案2】:

TL;博士

语言实现选择的相对优点超出了合理的堆栈溢出问题的范围。然而,这是一个很好的问题,因为它确定了语言中可能令人困惑的用例,并试图澄清两种语言元素之间的区别。

关键字、方法和看起来像方法的关键字

__FILE__ 是关键字

在 Ruby 1.9 中,__FILE__ 是一个关键字。尽管它看起来像是在 Object 类上定义的方法,但 Object#__FILE__ 的源代码说:

# File keywords.rb, line 68
def __FILE__
end

快速扫描 2.0.0-p0 中的源代码并没有找到关键字.rb 文件,但我们假设 __FILE__ 在语法上仍然是关键字。也许其他人可以将您指向当前定义的位置。

__dir__ 是一个方法

Kernel#__dir__ 实际上是一个方法。您可以通过 grepping 内核定义的方法来亲自查看:

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

错误和讨论

__FILE__ 既是关键字又是(某种)方法的事实是 called out in a bug 和一些 bug-related commentary。在Ruby-Core Forum 中还讨论了命名约定的各种利弊。

虽然答案可能有点不尽人意,但这就是目前的情况。如果这是您强烈关注的语言设计问题,那么加入 Ruby 核心团队将是解决它的正确方法。

【讨论】:

  • 关键字表在defs/keywords中定义(有趣的是,四年没变)
猜你喜欢
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 2014-09-04
  • 2012-01-20
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多