Erlang 컴파일러가 컴파일 타임에 정의되지 않은 함수를 감지하지 않는 이유는 무엇입니까? 내가 test.erl를 작성하는 경우왜 erlang : foo()가 컴파일 되었습니까?
는 :
-module(test).
-export([start/0]).
start() ->
erlang:foo().
그것은 잘 컴파일합니다.
Eshell V5.6.5 (abort with ^G)
1> c(test).
{ok,test}
2>
하지만 런타임이 중단됩니다.
2> test:start().
** exception error: undefined function erlang:foo/0
컴파일하는 동안 컴파일러에서 오류 또는 경고를 발행하지 않는 이유는 무엇입니까? 그것은 내 보낸 함수에 대해 알아야하지 않습니까?
코드 경로뿐만 아니라 Erlang 클러스터의 다른 노드.코드는 Erlang VM에로드되어 실행되기 위해 로컬 일 필요는 없습니다. –
나는 그것에 대해 정말로 생각하지 않았다. Erlang Cookbook을 간략히 살펴보면 어떻게하는지 알 수 있습니다. http://www.trapexit.org/Remote_Code_Load –
또한 모듈을 런타임에 바꾸거나 언로드 할 수 있으므로 컴파일러가 지금 검사하더라도 나중에는 여전히 실패 할 수 있습니다. – archaelus