Elixier: Wann werden .ex- und wann .exs-Dateien verwendet?

79

In der Dokumentation von Elixir heißt es

Neben der Elixir-Dateierweiterung .ex unterstützt Elixir auch .exs-Dateien für die Skripterstellung. Elixir behandelt beide Dateien genauso, der einzige Unterschied besteht in der Absicht. EX-Dateien sollen kompiliert werden, während EX-Dateien für die Skripterstellung verwendet werden, ohne dass eine Kompilierung erforderlich ist.

Ich bin mir aber immer noch nicht sicher, wann ich welchen Dateityp verwenden soll. Was sind die Nachteile und der Zweck von .ex und .exs?

Ole Spaarmann
quelle

Antworten:

147

.exist für kompilierten Code, .exsist für interpretierten Code.

ExUnit-Tests befinden sich beispielsweise in .exsDateien, sodass Sie nicht jedes Mal neu kompilieren müssen, wenn Sie Änderungen an Ihren Tests vornehmen. Wenn Sie Skripte oder Tests schreiben, verwenden Sie .exsDateien. Verwenden Sie andernfalls einfach .exDateien und kompilieren Sie Ihren Code.

Was die Vor- und Nachteile betrifft, dauert die Ausführung der Interpretation länger (da Elixier analysiert, tokenisiert usw. werden muss), erfordert jedoch keine Kompilierung, um ausgeführt zu werden. Das war's auch schon - wenn die Flexibilität beim Ausführen von Skripten wichtiger ist als die optimierte Ausführungszeit, verwenden Sie .exs. Meistens werden Sie verwenden .ex.

Cody Umfrage
quelle
6

Elixir kompiliert die gesamte EX-Datei. .exs-Dateien werden ebenfalls kompiliert, sollen jedoch beim Aufrufen ausgeführt werden. In den meisten Anwendungsfällen von EXS-Dateien wird Code beim Aufruf sofort ausgeführt. Denken Sie daran, EXS-Dateien zum Testen, Migrieren von Daten und Ausführen von Skripten zu verwenden. Stellen Sie sich EX-Dateien als für die Hauptgeschäftslogik Ihrer Anwendung verwendet vor.

Betrachten Sie dieses Beispiel

.ex Probe

sum.ex

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

$ iex sum.ex

iex> Sum.add(1,2)
3

.exs Probe

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}"

$ elixir sum.exs

 ->> "The sum of 3 + 2 is: 5"
Ben Hodge
quelle
1

Ich überprüfe es in Elixir Version 1.9.1 und die beiden Erweiterungen .ex, .exsmit kompiliert werden elixirc. Mit anderen Worten, wir erhalten .beamin beiden Fällen Bytecode ( Datei).

Dmitry S.
quelle