Moduł Elixir Simple generuje tylko „Błąd argumentu”

Nov 01 2020

Mam prosty, samodzielny moduł, który daje:

elixir impl_bad.ex
Błąd argumentu ** (ArgumentError)

W iex:

=> iex
Erlang / OTP 23 [erts-11.1] [źródło] [64-bit] [smp: 12:12] [ds: 12: 12: 10] [async-thread: 1] [hipe]

Interactive Elixir (1.9.4) - naciśnij Ctrl + C, aby wyjść (naciśnij h () ENTER, aby uzyskać pomoc)
iex (1)> c "impl_bad.ex"

== Błąd kompilacji w pliku impl_bad.ex ==
Błąd argumentu ** (ArgumentError)

Błąd argumentu ** (ArgumentError)

Kod:

defmodule ImplBad zrobić
  def run_addition_problems (aconfig) zrobić
    do_addition_problems (aconfig)
  koniec
koniec

Umieść ten 5-wierszowy kod w samym pliku.

Wiem, że metoda do_addition_problems () nie istnieje, ale spodziewałbym się niezdefiniowanego błędu z numerem linii.

Wyodrębniłem ten kod z pliku projektu, w którym istnieje do_addition_problems ().

Oczekiwałbym nieco więcej informacji od kompilatora. Musiałem przeprowadzić „wyszukiwanie binarne” z modułu około 1k LOC, aby wskazać ten problem.

Czy to problem z eliksirem 1.9.4?

Odpowiedzi

3 AlekseiMatiushkin Nov 02 2020 at 01:58

Jest to kwestia jednoczesnego używania Erlang/OTP 23 i Elixir 1.9.4 .

Elixir 1.9 jest starszy niż OTP 23 , ale elixir w pełni wykorzystuje OTP, więc opiera się na niektórych ostrzeżeniach / komunikatach pochodzących z kompilatora erlang podczas kompilacji.

To powiedziawszy, obniżenie wersji OTP do wersji, o której Elixir 1.9jest świadomy ( 21 byłoby w porządku, jak sądzę) lub uaktualnienie Elixiru do najnowszej 1.11.1rozwiązałoby problem, powodując fantazyjne

== Compilation error in file /tmp/test.ex ==
** (CompileError) /tmp/test.ex:3: undefined function do_addition_problems/1
    (elixir 1.11.1) src/elixir_locals.erl:114: anonymous fn/3 in :elixir_locals.ensure_no_undefined_local/3
    (stdlib 3.13.2) erl_eval.erl:680: :erl_eval.do_apply/6