В Ruby 2.0.0-p0 была введена переменная __dir__
для легкого доступа к каталогу исполняемого файла.
Почему __dir__
в нижнем регистре, если __FILE__
имеет верхний регистр?
В Ruby 2.0.0-p0 была введена переменная __dir__
для легкого доступа к каталогу исполняемого файла.
Почему __dir__
в нижнем регистре, если __FILE__
имеет верхний регистр?
Я думаю, это потому, что __FILE__
является постоянной времени синтаксического анализа, тогда как __dir__
является функцией и возвращает File.dirname(File.realpath(__FILE__))
Подробнее см. Это обсуждение
Относительные достоинства вариантов реализации языка выходят за рамки разумного вопроса. Тем не менее, это хороший вопрос, потому что он идентифицирует потенциально запутанный вариант использования в языке и стремится прояснить различие между двумя языковыми элементами.
__FILE__
- это __FILE__
слово В Ruby 1.9 ключевое слово __FILE__
. Хотя он выглядит как метод, определенный в классе Object, источник для Object #__ FILE__ говорит:
# File keywords.rb, line 68
def __FILE__
end
Быстрое сканирование источника в 2.0.0-p0 не __FILE__
к появлению файла __FILE__
, но предполагается, что синтаксически __FILE__
остается ключевым словом. Возможно, кто-то еще может указать вам местоположение текущего определения.
__dir__
- это методЯдро #__ dir__ на самом деле является методом. Вы можете убедиться в этом сами, выбрав определенные ядром методы:
Kernel.methods.grep /__dir__/
# => [:__dir__]
Тот факт, что __FILE__
является одновременно ключевым словом и (своего рода) методом, вызывается в сообщении об ошибке и в некотором комментарии, связанном с ошибкой. На форуме Ruby-Core обсуждались различные плюсы и минусы соглашения об именах.
Хотя ответ может быть немного неудовлетворительным, это текущее положение дел. Если вы решаете проблему языкового дизайна, то участие в основной команде Ruby было бы правильным способом ее решения.