मैं Erlang शैली खोज निकाला है लूप: कार्यों है कि सभी "चर भिन्न नहीं" ले के साथ पूंछ-प्रत्यावर्तन:गिनती (? कैसे मैं एक चर को बढ़ा देते है)
%% does something, 80 bytes at a time
loop(Line, File) -> loop(Line, File, 0).
loop(Line, File, Count) ->
do_something(Line, Count),
case file:read(File, 80) of
{ok, Line2} -> loop(Line2, File, Count + 1);
eof -> file:close(File);
{error, Reason} -> {error, Reason}
end.
लेकिन, एरलांग में काउंटर बढ़ाने का सबसे अच्छा तरीका क्या है? अधिकांश प्रोग्रामिंग भाषाओं में, जिस तरह से आप चीजों की गिनती करते हैं वह एक चर (यानी count += 1;
) बढ़ाकर होता है। Erlang के चर अलग-अलग नहीं होते हैं, इसलिए हमें रचनात्मक होना है। सौभाग्य से, हमारे पास विकल्प हैं ...
हम अपने कार्यों के साथ काउंटर वैरिएबल पास कर सकते हैं, और प्रत्येक फ़ंक्शन कॉल के साथ इसे बढ़ा सकते हैं। हम गणना करने के लिए प्रक्रिया शब्दकोश का उपयोग कर सकते हैं, और इसे बढ़ाने के लिए get
और put
का उपयोग कर सकते हैं। हम ईटीएस, प्रक्रियाओं के लिए स्थानीय डेटा भंडारण का उपयोग कर सकते हैं। हम काउंटर प्रक्रिया (!!!) का उपयोग कर सकते हैं:
loop(Count) ->
receive
{ incr } ->
loop(Count + 1);
{ report, To } ->
To ! { count, Count },
loop(Count)
end.
incr(Counter) ->
Counter ! { incr }.
get_count(Counter) ->
Counter ! { report, self() },
receive
{ count, Count } -> Count
end.
मुझे यकीन है कि दायरे के आधार पर अन्य तरीके भी हैं। Erlang में एक चर बढ़ाने के लिए "सर्वोत्तम अभ्यास" क्या माना जाता है?
यह प्रश्न उपयोग के बिना बहुत सार्थक नहीं है। सूची में चीजों को गिनने के लिए आप 'सूचियां: फ़ोल्डल' कर सकते हैं (या' फ़िल्टर' + 'लंबाई')। यदि आप 'gen_server' कॉल की गणना कर रहे हैं, तो आप इसे अपने सर्वर के राज्य के साथ आसानी से करते हैं। – Dustin
मैं पहले ही PHP खो रहा हूं ... स्थिर $ i; $ i ++; – Rolf