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

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

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


person conradkleinespel    schedule 03.03.2013    source источник
comment
__FILE__ является константой, а __dir__ - методом: permalink.gmane.org/gmane. comp.lang.ruby.core / 52295   -  person texasbruce    schedule 04.03.2013
comment
__FILE__ не является константой. Согласно Kernel.const_get, это даже недопустимое имя для константы.   -  person Pascal    schedule 11.01.2016


Ответы (2)


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

Для получения дополнительных сведений см. Это обсуждение

person Intrepidd    schedule 03.03.2013
comment
Это одна из немногих вещей, которые меня раздражают в рубине. Ну что ж. - person Nathan Lilienthal; 17.05.2013
comment
Ссылка устарела. - person ndnenkov; 24.01.2017

TL; DR

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

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

__FILE__ - ключевое слово

В Ruby 1.9 __FILE__ - ключевое слово. Хотя он выглядит как метод, определенный в классе Object, источник для Объект №__ FILE__ говорит:

# File keywords.rb, line 68
def __FILE__
end

Быстрое сканирование источника в 2.0.0-p0 не выявило файла keywords.rb, но предполагается, что __FILE__ синтаксически остается ключевым словом. Возможно, кто-то другой сможет указать вам на местоположение текущего определения.

__dir__ - это метод

Ядро #__ dir__ на самом деле является методом. Вы можете убедиться в этом сами, нажав определенные методы ядра:

Kernel.methods.grep /__dir__/
# => [:__dir__]

Ошибки и обсуждения

Тот факт, что __FILE__ является одновременно ключевым словом и (своего рода) методом, вызван ошибкой и некоторые комментарии об ошибках. Также обсуждались различные плюсы и минусы соглашения об именах в Форум по Ruby-Core.

Хотя ответ может быть несколько неудовлетворительным, но таково текущее положение дел. Если вы серьезно относитесь к проблеме языкового дизайна, участие в команде разработчиков ядра Ruby было бы правильным способом ее решения.

person Todd A. Jacobs    schedule 03.03.2013
comment
Таблица ключевых слов определена в defs / keywords (и что интересно , не менялась четыре года) - person dbenhur; 04.03.2013