जैसा कि मैं एरलांग सीखता हूं, मैं पूर्व को हल करने की कोशिश कर रहा हूं। 4.1 "" एक इको सर्वर ")" एरलांग प्रोग्रामिंग "पुस्तक (O'Reilly द्वारा) और मुझे एक समस्या है। मेरे कोड इस तरह दिखता है:एरलांग सरल सर्वर समस्या
-module(echo).
-export([start/0, print/1, stop/0, loop/0]).
start() ->
register(echo, spawn(?MODULE, loop, [])),
io:format("Server is ready.~n").
loop() ->
receive
{print, Msg} ->
io:format("You sent a message: ~w.~n", [Msg]),
start();
stop ->
io:format("Server is off.~n");
_ ->
io:format("Unidentified command.~n"),
loop()
end.
print(Msg) -> ?MODULE ! {print, Msg}.
stop() -> ?MODULE ! stop.
Unfortunatelly, मैं कुछ समस्याएं हैं। अपेक्षित कार्यों को चालू करने पर, यह एक नई प्रक्रिया उत्पन्न करता है और "सर्वर तैयार है" संदेश प्रदर्शित करता है। लेकिन जब मैं प्रिंट फ़ंक्शन का उपयोग करने का प्रयास करता हूं (जैसे echo:print("Some message.").
, उदाहरण के लिए) मुझे परिणाम मिला, लेकिन यह काम नहीं करता है जैसा मैं चाहता हूं। यह मेरे संदेश को एक सूची के रूप में प्रिंट करता है (एक स्ट्रिंग के रूप में नहीं) और यह
=ERROR REPORT==== 18-Jul-2010::01:06:27 ===
Error in process <0.89.0> with exit value: {badarg,[{erlang,register,[echo,<0.93.0>]},{echo,start,0}]}
त्रुटि संदेश उत्पन्न करता है। इसके अलावा, मैं एक त्रुटि
** exception error: bad argument
in function echo:stop/0
किसी को भी मुझे समझा सकते हो गया, जब मैं echo:stop()
द्वारा सर्वर को रोकने की कोशिश, यहाँ क्या हो रहा है? मैं एरलांग के लिए नया हूं और इस समय मुझे समझना मुश्किल लगता है।
स्ट्रिंग्स को एरलांग में सूचियों के रूप में दर्शाया जाता है। – Jonas
बेशक आप सही हैं, लेकिन चूंकि कोई वर्ण नहीं हैं, जिन्हें प्रदर्शित नहीं किया जा सका, यह एक सूची के रूप में क्यों प्रदर्शित होता है, स्ट्रिंग नहीं? लेकिन यह केवल एक चीज है, सबसे महत्वपूर्ण नहीं, समस्या वही रहती है। – Zbigniew
@ हैनिक ने मुख्य समस्या की व्याख्या की है। स्ट्रिंग्स पूर्णांक की सूचियां हैं, इसलिए '" abc "' '97,98,99]' जैसा ही है। तो erlang वास्तव में "पता नहीं" है अगर पूर्णांक की आपकी सूची केवल पूर्णांक या स्ट्रिंग की एक सूची है। प्रारूप स्ट्रिंग में '~ w' का उपयोग करके इसे केवल एक सूची के रूप में प्रिंट करता है। यदि आप '~ p'it का उपयोग करेंगे, तो परीक्षण करेगा यदि पूर्णांक की सूचियां प्रिंट करने योग्य स्ट्रिंग हो सकती हैं और यदि उन्हें स्ट्रिंग के रूप में प्रिंट करें। यह खोल क्या करता है। हां, इसका इरादा था, नहीं, यह कोई बग नहीं है। सूचियों के रूप में तार होने से उन्हें काम करना बहुत आसान हो जाता है। – rvirding