संपादित करें:आप gen_server मॉड्यूल को पैरामीटर कैसे करते हैं?
मैं इरलांग प्रोग्राम बनाने के सामान्य उद्देश्य के रूप में पैरामीटर का उपयोग नहीं कर रहा हूं - मैं अभी भी पारंपरिक डिजाइन सिद्धांतों को सीख रहा हूं। मैं ओओपी अनुकरण करने की भी तलाश नहीं कर रहा हूं। यहां मेरा एकमात्र बिंदु है कि मेरी gen_server कॉल सर्वर उदाहरणों में सुसंगत है। यह मेरे लिए एक टूटी हुई अमूर्तता को ठीक करने जैसा लगता है। मैं ऐसी दुनिया की कल्पना कर सकता हूं जहां भाषा या ओटीपी ने किसी भी gen_server इंस्टेंस के एपीआई का उपयोग करने के लिए सुविधाजनक बनाया है, और यह एक ऐसी दुनिया है जिसमें मैं रहना चाहता हूं।
जेड को यह दिखाने के लिए धन्यवाद कि मेरा प्राथमिक उद्देश्य संभव है।
क्या कोई भी gen_servers पर पैरामीटरयुक्त मॉड्यूल का उपयोग करने का कोई तरीका समझ सकता है? निम्न उदाहरण में, मान लीजिए कि test_child एक पैरामीटर के साथ एक gen_server है। जब मैंने इसे शुरू करने की कोशिश, सभी मैं है:
42> {test_child, "hello"}:start_link().
** exception exit: undef
in function test_child:init/1
called as test_child:init([])
in call from gen_server:init_it/6
in call from proc_lib:init_p_do_apply/3
अंत में, मैं एक gen_server के कई नामित उदाहरणों का उपयोग करने के लिए एक तरह से यह पता लगाने की कोशिश कर रहा हूँ। जहां तक मैं कह सकता हूं, जैसे ही आप इसे करना शुरू करते हैं, आप अब अपने सुंदर एपीआई का उपयोग नहीं कर सकते हैं और gen_server के साथ अपने उदाहरणों पर संदेशों को फेंकना होगा: कॉल और gen_server: cast। अगर मैं उनके नामों को उदाहरण बता सकता हूं, तो इस समस्या को कम किया जा सकता है।
आप एक ही कॉलबैक मॉड्यूल का उपयोग करके एकाधिक gen_servers चाहते हैं, प्रत्येक एक अलग नाम के साथ? या एक ही नाम के साथ कई gen_servers? – Jacob
एक ही कॉलबैक मॉड्यूल का उपयोग कर एकाधिक gen_servers। आप अलग-अलग "उदाहरण" को पंजीकृत करने के लिए एक नाम start_link पास कर सकते हैं। जब आपके पास एक ही उदाहरण हो, तो ऐसा लगता है कि यह मॉड्यूल के समान नाम देने के लिए सामान्य है, और फिर आपका सार्वजनिक एपीआई इस तरह काम करता है: some_module: some_function()। ... लेकिन ऐसा लगता है कि यह एक सुविधा है। यदि आप gen_server को किसी भिन्न नाम से पंजीकृत करते हैं, तो यह अब और काम नहीं करता है। मैं कुछ ऐसा करना चाहता हूं जैसे: 1> मॉड: some_function()। 2> मॉड 1: some_function()। ... जहां प्रत्येक चर gen_server मॉड्यूल – mwt
के विभिन्न उदाहरणों को संदर्भित करता है या वैकल्पिक रूप से, मैं जानना चाहता हूं कि मुझे इसकी परवाह क्यों नहीं करनी चाहिए। मैंने देखा है कि प्रत्येक gen_server परिचय gen_server कास्ट/कॉल का उपयोग करने के बजाय एक एपीआई सेट अप करता है।एरलांग के लिए नया होने के नाते, मुझे कई प्रक्रियाओं को आसानी से क्लोन करने में सक्षम होने की उम्मीद है, और मुझे आश्चर्य है कि जैसे ही आप अपने gen_servers का नाम बदलते हैं, एपीआई सुविधा टूट जाती है। – mwt