Почему __FILE__ в верхнем регистре и __dir__ в нижнем регистре?

В Ruby 2.0.0-p0 была введена переменная __dir__ для легкого доступа к каталогу исполняемого файла.

Почему __dir__ в нижнем регистре, если __FILE__ имеет верхний регистр?

Ответ 1

Я думаю, это потому, что __FILE__ является постоянной времени синтаксического анализа, тогда как __dir__ является функцией и возвращает File.dirname(File.realpath(__FILE__))

Подробнее см. Это обсуждение

Ответ 2

TL; DR

Относительные достоинства вариантов реализации языка выходят за рамки разумного вопроса. Тем не менее, это хороший вопрос, потому что он идентифицирует потенциально запутанный вариант использования в языке и стремится прояснить различие между двумя языковыми элементами.

Ключевые слова, методы и ключевые слова, похожие на методы

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