Das Elixir Simple-Modul erzeugt nur "Argument Error"

Nov 01 2020

Ich habe ein einfaches, eigenständiges Modul, das Folgendes ergibt:

Elixier impl_bad.ex
** (ArgumentError) Argumentfehler

In iex:

=> iex
Erlang / OTP 23 [erts-11.1] [Quelle] [64-Bit] [smp: 12: 12] [ds: 12: 12: 10] [asynchrone Threads: 1] [hipe]

Interaktives Elixier (1.9.4) - Drücken Sie zum Beenden Strg + C (geben Sie h () ENTER ein, um Hilfe zu erhalten).
iex (1)> c "impl_bad.ex"

== Kompilierungsfehler in der Datei impl_bad.ex ==
** (ArgumentError) Argumentfehler

** (ArgumentError) Argumentfehler

Der Code:

defmodule ImplBad do
  def run_addition_problems (aconfig) do
    do_addition_problems (aconfig)
  Ende
Ende

Platzieren Sie diesen 5-Zeilen-Code in einer Datei für sich.

Ich weiß, dass do_addition_problems () nicht existiert, aber ich würde einen undefinierten Fehler mit einer Zeilennummer erwarten.

Ich habe diesen Code aus einer Projektdatei extrahiert, in der do_addition_problems () vorhanden ist.

Ich würde ein bisschen mehr Informationen vom Compiler erwarten. Ich musste eine "binäre Suche" von einem Modul über 1k LOC durchführen, um dieses Problem zu lokalisieren.

Ist das ein Problem mit Elixier 1.9.4?

Antworten

3 AlekseiMatiushkin Nov 02 2020 at 01:58

Dies ist ein Problem der Verwendung Erlang/OTP 23 und Elixir 1.9.4 gleichzeitig.

Elixir 1.9 ist älter als OTP 23 , aber Elixir nutzt OTP vollständig aus, sodass es sich beim Kompilieren auf einige Warnungen / Meldungen des erlang- Compilers stützt .

Das heißt, ein Downgrade von OTP auf die Version Elixir 1.9ist bekannt ( 21 wäre in Ordnung, glaube ich), oder ein Upgrade von Elixir auf die neueste Version 1.11.1würde das Problem beheben, das zu Phantasie führt

== 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