Erlang Language
व्यवहार
खोज…
एक व्यवहार का उपयोग करना
यह -behaviour
करने के लिए इंगित करने के लिए अपने मॉड्यूल में -behaviour
निर्देश जोड़ें:
-behaviour(gen_server).
अमेरिकी वर्तनी को भी स्वीकार किया जाता है:
-behavior(gen_server).
अब कंपाइलर एक चेतावनी देगा यदि आप व्यवहार द्वारा आवश्यक किसी भी कार्य को लागू करना और निर्यात करना भूल गए हैं, जैसे:
foo.erl:2: Warning: undefined callback function init/1 (behaviour 'gen_server')
एक व्यवहार को परिभाषित करना
आप अपने मॉड्यूल में -callback
निर्देश जोड़कर अपने व्यवहार को परिभाषित कर सकते हैं। उदाहरण के लिए, यदि आपके व्यवहार को लागू करने वाले मॉड्यूल को एक foo
फ़ंक्शन की आवश्यकता होती है जो पूर्णांक लेता है और एक परमाणु लौटाता है:
-module(my_behaviour).
-callback foo(integer()) -> atom().
यदि आप इस व्यवहार को किसी अन्य मॉड्यूल में उपयोग करते हैं, तो कंपाइलर चेतावनी देगा कि अगर यह foo/1
निर्यात नहीं करता है, और डायलाइज़र चेतावनी देगा कि यदि प्रकार सही नहीं हैं। इस मॉड्यूल के साथ:
-module(bar).
-behaviour(my_behaviour).
-export([foo/1]).
foo([]) ->
{}.
और रनिंग dialyzer --src bar.erl my_behaviour.erl
, आपको ये चेतावनी मिलती है:
bar.erl:5: The inferred type for the 1st argument of foo/1 ([]) is not a supertype of integer(), which is expected type for this argument in the callback of the my_behaviour behaviour
bar.erl:5: The inferred return type of foo/1 ({}) has nothing in common with atom(), which is the expected return type for the callback of my_behaviour behaviour
एक कस्टम व्यवहार में वैकल्पिक कॉलबैक
डिफ़ॉल्ट रूप से, व्यवहार मॉड्यूल में एक -callback
निर्देश में निर्दिष्ट किसी भी फ़ंक्शन को उस व्यवहार को लागू करने वाले मॉड्यूल द्वारा निर्यात किया जाना चाहिए। अन्यथा, आपको एक संकलक चेतावनी मिलेगी।
कभी-कभी, आप चाहते हैं कि कॉलबैक फ़ंक्शन वैकल्पिक हो: व्यवहार इसका उपयोग करेगा यदि मौजूद और निर्यात किया गया हो, और अन्यथा डिफ़ॉल्ट कार्यान्वयन पर वापस आ जाए। ऐसा करने के लिए, लिखने -callback
हमेशा की तरह निर्देश, और फिर कॉलबैक फ़ंक्शन सूची एक में -optional_callbacks
निर्देश:
-callback bar() -> ok.
-optional_callbacks([bar/0]).
यदि मॉड्यूल bar/0
निर्यात करता है, तो डायलाइज़र अभी भी प्रकार की जांच करेगा, लेकिन यदि फ़ंक्शन अनुपस्थित है, तो आपको एक कंपाइलर चेतावनी नहीं मिलेगी।
Erlang / OTP में, यह gen_server
, gen_fsm
और gen_event
बिहेवियर में format_status
कॉलबैक फ़ंक्शन के लिए किया जाता है।