2011-11-03 2 views
1

나는 Erlang Programming에서 연습 문제 12-2를 연구 중이다. 모듈이 있습니다 db_server_otp OTP gen_server 동작을 구현합니다. 독립 실행 형 모듈로서, 나는 그것을 테스트하고 예상대로 작동합니다. 이제 관리자를 추가해야합니다. 같은 작업 디렉토리 곳에서Erlang OTP 감독관

-module(db_server_sup). 
-export([start/0,init/1]). 
-behavior(supervisor). 

start() -> 
    supervisor:start_link({local, ?MODULE}, ?MODULE, []). 

init(_Arguments) -> 
    DbServerOtp = {db_server_otp,    %% Id 
        {db_server_otp, start, []}, %% child process 
        permanent,     %% restart 
        30000,      %% shutdown (ms) 
        worker,      %% type 
        {db_server_otp}},    %% required modules 
    {ok, 
    {{one_for_all,   %% terminate all children and restart 
     5,      %% max of n restarts in MaxSeconds 
     3600},     %% MaxSeconds (s) 
     [DbServerOtp]}}.  %% child process list 

두 모듈이 동일한 디렉토리에있는 내가 .beam 파일이 두 모듈을 컴파일되어 다음과 같이 장의 예를 바탕으로, 나는 db_server_sup 모듈 을 생성 나는 erlang 쉘을 시작합니다. 그러나 erlang 쉘을 사용하면 관리자를 시작할 수 없습니다.

Erlang R13B03 (erts-5.7.4) [source] [64-bit] [smp:8:2] [rq:8] [async-threads:0] [hipe] [kernel-poll:false] Eshell V5.7.4 (abort with ^G) 1> c(db_server_otp). ./db_server_otp.erl:5: Warning: undefined callback function code_change/3 (behaviour 'gen_server') ./db_server_otp.erl:5: Warning: undefined callback function handle_info/2 (behaviour 'gen_server') {ok,db_server_otp} 2> c(db_server_sup). {ok,db_server_sup} 3> db_server_sup:start(). ** exception exit: {start_spec,{invalid_modules,{db_server_otp}}} 

내가 db_server_otp 모듈을 수입해야합니까? 그렇다면 어떤 기능을 가져와야합니까?

-module(db_server_otp). 
-export([start/0,stop/0]). 
-export([write/2,read/1,delete/1,match/1]). 
-export([init/1,terminate/2,handle_cast/2,handle_call/3]). 
-behavior(gen_server). 
+0

여기에서 가져 오는 문제는 무엇이든간에 ** ** 도움이되지 않습니다. 순수한 문법적인 설탕 **을 사용하면 모듈 이름을 쓰지 않고도 다른 모듈에서 함수를 호출 할 수 있습니다. 그것은 의미 론적 의미가 전혀 없습니다. 많은 사람들은 명확성을 줄이므로 사용하지 말라고 말합니다. – rvirding

+0

나는 명확성에 관한 그 진술에 동의 할 수 있다고 생각한다. 물론 C++ 코드에서 네임 스페이스를 작성하여 코드를 쉽게 찾을 수 있습니다. –

답변