66

Ruby 2.0.0-p0では、__dir__現在実行中のファイルのディレクトリに簡単にアクセスできるように変数が導入されました。

__dir__大文字であるのに小文字であるのはなぜ__FILE__ですか?

4

2 に答える 2

67

これ__FILE__は、が解析時定数であるのに対し、__dir__は関数であり、File.dirname(File.realpath(__FILE__))

詳細については、このディスカッションを参照してください

于 2013-03-03T20:53:35.813 に答える
37

TL; DR

言語実装の選択の相対的なメリットは、合理的なStackOverflowの質問の範囲外です。ただし、これは、言語の潜在的に紛らわしいユースケースを識別し、2つの言語要素の違いを明確にしようとするため、良い質問です。

キーワード、メソッド、およびメソッドのように見えるキーワード

__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__は実際にはメソッドです。カーネルで定義されたメソッドをgrepすることで、これを自分で確認できます。

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

バグとディスカッション

__FILE__キーワードと(一種の)メソッドの両方であるという事実は、バグといくつかのバグ関連の解説で呼び出されます。Ruby-Coreフォーラムでは、命名規則のさまざまな長所と短所についても議論されました。

答えは少し不十分かもしれませんが、それが現状です。それがあなたが強く感じている言語設計の問題であるならば、Rubyコアチームに参加することはそれに対処するための適切な方法でしょう。

于 2013-03-03T21:33:23.853 に答える