2017-12-28 6 views
1

제가 이해하는 것은 -export()은 모듈 정의에서 일부는 아니지만 모든 함수를 노출 할 수 있도록합니다. 그러나 모듈 정의 내에서 모든 기능을 사용할 수 있습니다.왜이 모듈에서`export`가 제대로 작동하지 않습니까?

은 내가 그것은 경우 I export_all 및 노출 모두 사라집니다 다음과 같은 오류

=ERROR REPORT==== ... === 
Error in process ... with exit value: 
{undef,[{supervisor_test,supervisor,[],[]}]} 

을 얻을, 내가 컴파일하고 supvervisor_test:start_listening()를 호출 할 때마다이

-module(supervisor_test). 
-export([start_listening/0, stop_listening/0, send_to_listener/1]). 

listener() -> 
    receive 
    {Pid, Ref, x} -> 
     Pid ! {Ref, o}; 
    {Pid, Ref, o} -> 
     Pid ! {Ref, x} 
    end. 

supervisor() -> 
    process_flag(trap_exit, true), 
    Pid = spawn_link(?MODULE, listener, []), 
    register(reg_listener, Pid), 
    receive 
    {'EXIT', Pid, normal} -> % received when listener() finishes executing 
     ok; 
    {'EXIT', Pid, shutdown} -> % received when stop_listening() is called 
     ok; 
    {'EXIT', Pid, _} -> 
     supervisor() 
    end. 

start_listening() -> 
    spawn(?MODULE, supervisor, []). 

stop_listening() -> 
    Pid = whereis(reg_listener), 
    exit(Pid, shutdown). 

send_to_listener(Value) -> 
    Ref = make_ref(), 
    reg_listener ! {self(), Ref, Value}, 
    receive 
    {Ref, Reply} -> Reply 
    after 5000 -> 
    timeout 
    end. 

과 같은 모듈이있다.

나는
-module(test). 
    -export([f1/0]). 

    f1() -> 
    f2(). 

    f2() -> 
    io:format("I am here!~n"). 

를 컴파일하고 test:f1()를 호출 시도하고 그것을 잘 작동합니다.

답변

4

start_listener()에서 spawn()의 MFA 버전을 사용 중입니다. 이 경우 apply()을 사용하고 문서 적용 상태는 "적용된 함수를 모듈에서 내 보내야합니다."

관련 문제