मैंने अपने अधिकांश ऐप को ओटीपी व्यवहारों में पोर्ट किया, लेकिन मैं फंस गया हूं। मैं एक gen_server का उपयोग कर चुनिंदा प्राप्त करने के तरीके को समझ नहीं सकता। यदि कोई भी कॉलबैक फ़ंक्शन खंड किसी संदेश से मेल नहीं खाता है, तो संदेश को मेलबॉक्स में वापस डालने के बजाय, यह त्रुटियां समाप्त हो जाती है!gen_servers में आप चुनिंदा प्राप्त कैसे करते हैं?
अब, हर जगह मैं जाता हूं, लोगों को चुनिंदा अधिग्रहण प्राप्त होता है। जहां भी मैं जाता हूं, लोग ओटीपी की प्रशंसा करते हैं। क्या यह वास्तव में सच हो सकता है कि आप दोनों एक साथ नहीं हो सकते हैं? क्या यह एक प्रमुख, सुधार योग्य कमी की तरह प्रतीत नहीं होता है?
एरलांग प्रोग्रामर इसे कैसे संभालते हैं?
संपादित करें (जेड की टिप्पणी का जवाब):
एक उदाहरण है जहाँ मैं क्रमबद्ध क्रम में मुद्रित पूर्णांकों की एक सूची देखना चाहते हैं क्या है:
-module(sel_recv).
-behaviour(gen_server).
-export([start_link/0]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3]).
-export([test/0]).
start_link() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
test() ->
gen_server:cast(?MODULE, test).
init([]) ->
{ok, 0}.
handle_call(_Request, _From, State) ->
Reply = ok,
{reply, Reply, State}.
handle_cast(test, _State) ->
lists:map(fun(N) ->
gen_server:cast(?MODULE, {result, N})
end, [9,8,7,6,5,4,3,2,1]),
{noreply, [1,2,4,5,6,7,8,9]};
handle_cast({result, N}, [N|R]) ->
io:format("result: " ++ integer_to_list(N) ++ "~n"),
{noreply, R}.
handle_info(_Info, State) ->
{noreply, State}.
terminate(_Reason, _State) ->
ok.
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
बेशक
, मेरा असली अनुप्रयोग में, टाइमर देरी होती है और संदेशों को संसाधित करने की आवश्यकता होती है जो अन्य संदेशों के साथ मिलती हैं। विशेष रूप से, मैं http अनुरोध भेजता हूं, कभी-कभी कई बार, कभी-कभी एक समय में उनके बीच अंतराल के साथ। किसी भी मामले में, मुझे उन्हें क्रम में इकट्ठा करने की आवश्यकता है।
आप क्या हासिल करना चाहते हैं? – Zed