Mô-đun Elixir Simple chỉ tạo ra "Lỗi đối số"
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
Đây là một vấn đề sử dụng Erlang/OTP 23 và Elixir 1.9.4 đồng thời.
Elixir 1.9 là lớ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