Mô-đun Elixir Simple chỉ tạo ra "Lỗi đối số"

Nov 01 2020

Tôi có một mô-đun đơn giản, độc lập mang lại:

elixir impl_bad.ex
** (ArgumentError) lỗi đối số

Trong iex:

=> iex
Erlang / OTP 23 [erts-11.1] [source] [64-bit] [smp: 12: 12] [ds: 12: 12: 10] [async-thread: 1] [hipe]

Interactive Elixir (1.9.4) - nhấn Ctrl + C để thoát (gõ h () ENTER để được trợ giúp)
iex (1)> c "impl_bad.ex"

== Lỗi biên dịch trong tệp impl_bad.ex ==
** (ArgumentError) lỗi đối số

** (ArgumentError) lỗi đối số

Mật mã:

defmodule ImplBad do
  def run_addition_problems (aconfig) do
    do_addition_problems (aconfig)
  kết thúc
kết thúc

Đặt mã 5 dòng này vào một tệp của chính nó.

Tôi biết do_addition_problems () không tồn tại nhưng tôi sẽ gặp lỗi không xác định với số dòng.

Tôi đã trích xuất mã này từ tệp dự án có tồn tại do_addition_problems ().

Tôi mong đợi thêm một chút thông tin từ trình biên dịch. Tôi đã phải thực hiện "tìm kiếm nhị phân" từ một mô-đun khoảng 1k LOC để xác định chính xác vấn đề này.

Đây có phải là vấn đề với elixir 1.9.4?

Trả lời

3 AlekseiMatiushkin Nov 02 2020 at 01:58

Đây là một vấn đề sử dụng Erlang/OTP 23 Elixir 1.9.4 đồng thời.

Elixir 1.9lớn tuổi hơn OTP 23 , nhưng elixir thúc đẩy hoàn toàn OTP, vì vậy nó phụ thuộc vào một số cảnh báo / tin nhắn đến từ erlang biên dịch trong biên dịch.

Điều đó nói rằng, hạ cấp OTP xuống phiên bản Elixir 1.9được biết ( tôi tin rằng 21 sẽ ổn) hoặc nâng cấp Elixir lên phiên bản gần đây 1.11.1sẽ khắc phục sự cố tạo ra

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