में इंडेक्स के साथ एक राज्यव्यापी लुकअप टेबल रखने का बेवकूफ तरीका मैं सामान्य रूप से क्लोजर और कार्यात्मक प्रोग्रामिंग के लिए बिल्कुल नया हूं और मैं निम्नलिखित समस्या से जूझ रहा हूं। मैं टोकन (तार) की एक श्रृंखला के लिए एक अद्वितीय और स्थिर सूचकांक असाइन करना चाहता हूं। चूंकि सम्मिलन की तुलना में बहुत अधिक लुकअप होंगे, इसलिए हैश-मैप जाने का तरीका प्रतीत होता है।क्लोजर
जावा में मैं
int last = 0;
HashMap<String, Integer> lut = new HashMap<String, Integer>();
function Integer getIndex(String token) {
Integer index = lut.get(token);
if(index == null)
last++;
lut.put(token, last);
return last;
else {
return index;
}
}
की तर्ज पर कुछ लिखा है होगा Clojure लिप्यंतरित संस्करण होगा
(def last-index (atom 0))
(def lookup-table (atom {}))
(defn get-index [token]
(if (nil? (get @lookup-table token))
(do
(swap! last-index inc)
(swap! lookup-table assoc token @last-index)
@last-index)
(get @lookup-table token)))
की तरह कुछ लेकिन इस के बाद से बहुत idomatic होना प्रतीत नहीं होता है यह मूल रूप से साइड इफेक्ट्स और इसे छिपा भी नहीं करता है।
तो आप राज्य को रखने के लिए दो परमाणुओं के बिना ऐसा कैसे करेंगे? परमाणु में
यह ध्यान देने योग्य है कि आप इस तरह के कोड नहीं चाहते हैं जो एक दूसरे पर निर्भर दो परमाणुओं को संशोधित करता है। परमाणु स्वतंत्र राज्य के लिए हैं। यदि आपको एक-दूसरे पर निर्भर एकाधिक म्यूटेट करने की आवश्यकता है, तो आपको रेफ और डॉसिंक का उपयोग करना चाहिए। अंकुर के जवाब को देखते हुए यहां विशेष रूप से प्रासंगिक नहीं है, लेकिन कुछ ध्यान में रखना है। – Rayne