Tại sao trình biên dịch Erlang không phát hiện các hàm không xác định trong thời gian biên dịch.Tại sao erlang: foo() biên dịch?
Nếu tôi viết test.erl:
-module(test).
-export([start/0]).
start() ->
erlang:foo().
Nó biên dịch tốt.
Eshell V5.6.5 (abort with ^G)
1> c(test).
{ok,test}
2>
Nhưng thời gian chạy bị treo.
2> test:start().
** exception error: undefined function erlang:foo/0
Tại sao trình biên dịch không đưa ra lỗi hoặc cảnh báo về điều này trong khi biên dịch? Nó nên biết về chức năng xuất khẩu, phải không?
Không chỉ đường dẫn mã mà còn các nút khác trong cụm Erlang.Mã không phải là cục bộ để được nạp vào một máy ảo Erlang và được thực thi. –
Tôi đã không thực sự nghĩ về điều đó. Một cái nhìn nhanh chóng tại Cookbook Erlang lần lượt lên làm thế nào để làm điều đó. http://www.trapexit.org/Remote_Code_Load –
Ngoài ra, bạn được tự do thay thế hoặc dỡ bỏ mô-đun trong thời gian chạy, vì vậy ngay cả khi trình biên dịch đã kiểm tra ngay bây giờ, nó vẫn có thể bị lỗi sau. – archaelus