Можно ли запустить интерактивную оболочку эликсира и сразу же вызвать функцию?

В elixir вы можете использовать оболочку iex с контекстом вашего приложения с помощью следующей команды...

iex -S mix

Эта команда очень удобна и позволяет нам использовать функции приложения в интерактивной оболочке.

Мне интересно, можно ли запустить интерактивную оболочку с аргументами или возможно ли, чтобы ваше приложение вызывало некоторые функции, прежде чем пользователь сможет взаимодействовать с оболочкой.

Например, предположим, что у меня есть приложение с именем MyApp, и я запускаю его с iex -S mix. Вместо того, чтобы вручную вводить команды в оболочку, например.

iex()> import MyApp.Module

iex()> alias MyApp.Module.OtheName

iex()> value = OtherName.function(1234)

был бы способ сделать это автоматически.


person RobStallion    schedule 07.04.2019    source источник


Ответы (1)


Вы можете создать файл .iex.exs в каталоге вашего приложения с кодом, который будет запускаться при запуске. Со страницы руководства iex:

После запуска iex ищет файл .iex.exs и в случае успеха выполняет код из файла в контексте шелла. Сначала поиск начинается в текущем рабочем каталоге, затем, при необходимости, продолжается в домашнем каталоге.

Но имейте в виду, что если вы поместите код конкретного приложения в этот файл, он будет работать правильно, только если вы выполните iex -S mix, но не когда вы выполните только iex.

person zwippie    schedule 07.04.2019
comment
Интересно, что это ведет себя иначе, чем просто передача имени скрипта через iex scripts.exs. Передача имени скрипта не сохраняет назначенные переменные, а .iex.exs сохраняет. Вы также можете настроить имя файла с помощью --dot-iex (странное имя параметра). - person Adam Millerchip; 08.04.2019
comment
Ах, я не знал, что --dot-iex вариант. Очень полезный. - person zwippie; 08.04.2019