खोज…


एक व्यवहार का उपयोग करना

यह -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

एक कस्टम व्यवहार में वैकल्पिक कॉलबैक

18.0

डिफ़ॉल्ट रूप से, व्यवहार मॉड्यूल में एक -callback निर्देश में निर्दिष्ट किसी भी फ़ंक्शन को उस व्यवहार को लागू करने वाले मॉड्यूल द्वारा निर्यात किया जाना चाहिए। अन्यथा, आपको एक संकलक चेतावनी मिलेगी।

कभी-कभी, आप चाहते हैं कि कॉलबैक फ़ंक्शन वैकल्पिक हो: व्यवहार इसका उपयोग करेगा यदि मौजूद और निर्यात किया गया हो, और अन्यथा डिफ़ॉल्ट कार्यान्वयन पर वापस आ जाए। ऐसा करने के लिए, लिखने -callback हमेशा की तरह निर्देश, और फिर कॉलबैक फ़ंक्शन सूची एक में -optional_callbacks निर्देश:

-callback bar() -> ok.
-optional_callbacks([bar/0]).

यदि मॉड्यूल bar/0 निर्यात करता है, तो डायलाइज़र अभी भी प्रकार की जांच करेगा, लेकिन यदि फ़ंक्शन अनुपस्थित है, तो आपको एक कंपाइलर चेतावनी नहीं मिलेगी।

Erlang / OTP में, यह gen_server , gen_fsm और gen_event बिहेवियर में format_status कॉलबैक फ़ंक्शन के लिए किया जाता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow