В 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 было бы правильным способом ее решения.