Tôi khá mới đối với Elixir và các ngôn ngữ lập trình chức năng nói chung.Elixir - Gọi phương thức trên mô-đun bằng String-name
Trong Elixir, tôi muốn gọi một hàm cụ thể trên Mô-đun, với tên Mô-đun là Chuỗi.
Tôi đã có như sau (rất xấu) mã làm việc, trong đó khá nhiều những gì tôi muốn:
module_name = elem(elem(Code.eval_file("module.ex", __DIR__), 0), 1)
apply(module_name, :helloWorld, [])
này (ít nhất là như tôi hiểu nó) biên dịch (đã được biên soạn) mô-đun của module.ex
trong thư mục hiện tại. Tôi đang giải nén tên mô-đun (không phải là một String, không biết dữ liệu loại nó thực sự là gì) trong số hai bộ dữ liệu và chạy phương thức helloWorld
trên đó.
Có hai vấn đề với mã này:
Nó in một cảnh báo như
redefining module Balance
. Tôi chắc chắn không muốn điều đó xảy ra trong sản xuất.AFAIK mã này biên dịch
module.ex
. Nhưng như module.ex đã được biên dịch và tải, nó không muốn điều đó xảy ra.
Tôi không cần gọi các phương thức trên các mô-đun này bằng tên tệp, tên mô-đun cũng sẽ ổn. Nhưng nó phải bằng năng động, ví dụ. nhập "Sách" tại dòng lệnh, sau khi kiểm tra xem mô-đun có tồn tại hay không, hãy gọi hàm Book.helloWorld
.
Cảm ơn.
lưu ý nhỏ: bạn nên sử dụng to_existing_atom bất cứ khi nào có thể. Nguyên tử arent rác thu thập! –
Cảm ơn! Tôi không biết rằng các nguyên tử không phải là rác được thu thập. Sẽ chỉnh sửa câu trả lời của tôi. – lschuermann