खुले प्रश्न को परिभाषित करने के भीतर समारोह को उठा लिया की arity को परिभाषित करने के भीतर समारोह के
सूचकांक: क्या का अर्थ है पैरामीटर और इन कार्यों के वापसी मूल्य? एरिंग-प्रश्न मेलिंगलिस्ट पर एक ही प्रश्न के लिए this answer by Robert Virding पर बस ठोकर खाई।
कोड है जो इन नामों बनाता है कई मॉड्यूल में फैला है: funs के लिए sys_pre_expand
; समझ के लिए बनाए गए कार्यों के लिए v3_core
; और v3_kernel
जो लैम्ब्डा कार्यों को उठाने पर अधिक जोड़ता है। इन सभी का लक्ष्य "अद्वितीय" फ़ंक्शन नाम बनाना है जो कुछ संकेत देते हैं कि फ़ंक्शंस क्यों बनाए गए थे और क्यों।
%% new_fun_name(State) -> {FunName,State}.
new_fun_name(#expand{func=F,arity=A,fcount=I}=St) ->
Name = "-" ++ atom_to_list(F) ++ "/" ++ integer_to_list(A)
++ "-fun-" ++ integer_to_list(I) ++ "-",
{list_to_atom(Name),St#expand{fcount=I+1}}.
इन नामों पर पारित कर रहे हैं और बाद में पास (v3_kernel) में विस्तार:
sys_pre_expand.erl
में funs के लिए फ़ंक्शन नाम बनाने कोड सामने है।
compilers v3_core.erl
से:
%% new_fun_name(Type, State) -> {FunName,State}.
new_fun_name(Type, #core{fcount=C}=St) ->
{list_to_atom(Type ++ "$^" ++ integer_to_list(C)),St#core{fcount=C+1}}.
तो यह "नियंत्रण रेखा $^2" (भागों 4 और 5) उदाहरण में के लिए खातों। उन स्थानों को देखते समय जहां इसका उपयोग किया जाता है, भाग 4 के लिए संभावित मानों को घटाया जा सकता है: lc
, blc
और lbc
।
%% new_fun_name(Type, State) -> {FunName,State}.
new_fun_name(Type, #kern{func={F,Arity},fcount=C}=St) ->
Name = "-" ++ atom_to_list(F) ++ "/" ++ integer_to_list(Arity) ++
"-" ++ Type ++ "-" ++ integer_to_list(C) ++ "-",
{list_to_atom(Name),St#kern{fcount=C+1}}.
यह -loop/4-
(भागों 2 और 3) और -3-
(भाग 7) के लिए खातों:
v3_kernel.erl
में अगले चरण जब इन कार्यों लैम्ब्डा उठा लिया हो रहा है। भाग 6 को new_fun_name/2
पर कॉल में जोड़ा गया है।
(यह पोस्ट एक समुदाय विकी है अगर आप जानते हैं कि वे क्या मतलब है, कृपया अन्य प्रविष्टियों को जोड़ने)
हम कोड है कि इस उत्पन्न करता है पर गौर करना चाहिए ... –
सामान्य रूप में funs में शामिल रहे हैं, तो उपर्युक्त विवरण, 'मजेदार' एक वैध प्रकार है (सामान्य मज़े के अंदर क्रैश करने का प्रयास करें)। –