Ruby 2.0.0-p0では、__dir__
現在実行中のファイルのディレクトリに簡単にアクセスできるように変数が導入されました。
__dir__
大文字であるのに小文字であるのはなぜ__FILE__
ですか?
Ruby 2.0.0-p0では、__dir__
現在実行中のファイルのディレクトリに簡単にアクセスできるように変数が導入されました。
__dir__
大文字であるのに小文字であるのはなぜ__FILE__
ですか?
これ__FILE__
は、が解析時定数であるのに対し、__dir__
は関数であり、File.dirname(File.realpath(__FILE__))
詳細については、このディスカッションを参照してください
言語実装の選択の相対的なメリットは、合理的な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コアチームに参加することはそれに対処するための適切な方法でしょう。