Ruby 2.0.0-p0では、__dir__
変数は、現在実行中のファイルのディレクトリに簡単にアクセスできるように導入されました。
なぜ__dir__
小文字の場合__FILE__
は大文字ですか?
___FILE__
_は解析時間定数であるのに対し、___dir__
_は関数であり、File.dirname(File.realpath(__FILE__))
を返すためです
詳細については、 このディスカッション を参照してください。
言語実装の選択の相対的なメリットは、合理的なスタックオーバーフローの質問の範囲外です。ただし、これは言語の混乱を招く可能性のあるユースケースを特定し、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 Forum では、命名規則のさまざまな長所と短所についても議論されました。
答えはちょっと物足りないかもしれませんが、それが現状です。それがあなたが強く感じる言語設計の問題である場合、Rubyコアチームに参加することはそれに対処する適切な方法でしょう。