Файл .erlang
оценивается при запуске оболочки, но НЕ оценивается в контексте оболочки. Это означает, что он может содержать только общие выражения, которые оцениваются, а не команды оболочки. К сожалению, rr()
является командой оболочки (она инициализирует локальные данные оболочки для распознавания записей), поэтому ее нельзя использовать в файле .erlang
.
Хотя пользовательский модуль user_default
, который должен быть предварительно загружен, может включать в себя файлы, содержащие определения записей с использованием -include
или -include_lib
, эти определения записей будут доступны только для функций, определенных в user_default
. user_default
- это обычный скомпилированный модуль, и экспортированные в него функции вызываются как любые другие функции, поэтому определения записей не будут видны внутри оболочки user_default
позволяет пользователю определять более сложные функции, которые можно вызывать из оболочки, как команды оболочки.
EDIT:
Я был частично не прав здесь. Хотя я был прав насчет того, как оценивается .erlang
и как вызываются функции в user_default
, я упустил, как при запуске оболочки сканируется user_default.erl
для определения записей, которые затем доступны внутри оболочки. Спасибо @Peer Stritzinger за то, что указал на это.