Еліксир: коли використовувати .ex і коли .exs файли


80

У документації Elixir зазначено, що

На додаток до розширення файлу Elixir .ex, Elixir також підтримує файли .exs для сценаріїв. Elixir трактує обидва файли абсолютно однаково, різниця лише в намірах. Файли .ex призначені для компіляції, тоді як файли .exs використовуються для створення сценаріїв без необхідності компіляції.

Але я все ще не впевнений, коли використовувати тип файлу. Які мінуси та призначення .ex та .exs?

Відповіді:


148

.exпризначений для скомпільованого коду, .exsпризначений для інтерпретованого коду.

Наприклад, тести ExUnit містяться у .exsфайлах, тому вам не доведеться перекомпілювати кожен раз, коли вносите зміни у свої тести. Якщо ви пишете сценарії або тести, використовуйте .exsфайли. В іншому випадку просто використовуйте .exфайли та скомпілюйте свій код.

Що стосується плюсів / мінусів, то інтерпретація триватиме довше (оскільки еліксир повинен аналізувати, токенізувати тощо), але для запуску компіляції не потрібно. Це майже все - якщо гнучкість запуску сценаріїв важливіша за оптимізований час виконання, використовуйте .exs. Більшу частину часу ви будете використовувати .ex.


6

Elixir скомпілює весь файл .ex. .exs Файли також компілюються, але призначені для виконання при виклику. Отже, більшість випадків використання файлів .exs - це негайне виконання коду при виклику. Подумайте про те, щоб використовувати файли .exs для тестування, переміщення даних та запуску сценаріїв. Подумайте, що файли .ex використовуються як основна бізнес-логіка вашого додатка.

Розглянемо цей приклад

.ex зразок

sum.ex

defmodule Sum do
  add(a, b) do
     a + b
  end
end

$ iex sum.ex

iex> Sum.add(1,2)
3

.exs зразок

sum.exs

defmodule Sum do
  def add(a,b)  do
    a + b
  end
end

#within same file

IO.puts "The sum of 3 + 2 is: #{inspect Sum.add(3, 2}"

$ еліксир sum.exs

 ->> "The sum of 3 + 2 is: 5"

1

Я перевірити його в Elixir версії 1.9.1 і обидва розширення .ex, .exsбудуть скомпільовані з elixirc. Іншими словами, ми отримуємо байт-код ( .beamфайл) в обох випадках.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.