Modul Elixir Simple hanya menghasilkan "Argument Error"

Nov 01 2020

Saya memiliki modul sederhana dan berdiri sendiri yang menghasilkan:

elixir impl_bad.ex
** (ArgumentError) kesalahan argumen

Dalam iex:

=> iex
Erlang / OTP 23 [erts-11.1] [sumber] [64-bit] [smp: 12: 12] [ds: 12: 12: 10] [utas asinkron: 1] [hipe]

Elixir Interaktif (1.9.4) - tekan Ctrl + C untuk keluar (ketik h () ENTER untuk bantuan)
iex (1)> c "impl_bad.ex"

== Kesalahan kompilasi dalam file impl_bad.ex ==
** (ArgumentError) kesalahan argumen

** (ArgumentError) kesalahan argumen

Kode:

defmodule ImplBad lakukan
  def run_addition_problems (aconfig) lakukan
    do_addition_problems (aconfig)
  akhir
akhir

Tempatkan kode 5 baris ini dalam file dengan sendirinya.

Saya tahu do_addition_problems () tidak ada tetapi saya mengharapkan kesalahan yang tidak ditentukan dengan nomor baris.

Saya mengekstrak kode ini dari file proyek di mana do_addition_problems () memang ada.

Saya mengharapkan lebih banyak informasi dari kompiler. Saya harus melakukan "pencarian biner" dari modul sekitar 1k LOC untuk menunjukkan masalah ini.

Apakah ini masalah dengan elixir 1.9.4?

Jawaban

3 AlekseiMatiushkin Nov 02 2020 at 01:58

Ini adalah masalah penggunaan Erlang/OTP 23 dan Elixir 1.9.4 secara bersamaan.

Elixir 1.9 adalah lebih tua dari OTP 23 , tetapi obat mujarab sepenuhnya memanfaatkan OTP, sehingga bergantung pada beberapa peringatan / pesan yang datang dari erlang compiler selama kompilasi.

Yang mengatakan, menurunkan OTP ke versi Elixir 1.9itu sadar ( 21 akan baik-baik saja, saya percaya,) atau memutakhirkan Elixir ke yang terbaru 1.11.1akan memperbaiki masalah yang menghasilkan mewah.

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