सब, मैं क्लोजर भाषा पर एक नज़र डालना शुरू कर रहा हूं, और कुछ ऐसा करने के बारे में कुछ प्रश्न हैं जो मैं करने की कोशिश कर रहा हूं। व्यापक उद्देश्य अनुक्रम फ़ंक्शन every?
से all?
को उपनाम करना है। मुझे यकीन है कि एक फ़ंक्शन या मैक्रो है जो उपनाम (या उन पंक्तियों के साथ कुछ) करता है लेकिन मैं देखना चाहता था कि कुछ बुनियादी संरचनाओं के साथ यह संभव था कि मैं अब तक जानता हूं। मेरा दृष्टिकोण all?
नामक एक फ़ंक्शन को परिभाषित करने वाला था जो every?
कार्यान्वयन के लिए अपने तर्क लागू करता है।क्लोजर मेटाप्रोग्रामिंग प्रश्न (शुरुआत के लिए!)
मुझे यह देखने के लिए उत्सुकता है कि इसे अज्ञेयवादी बनाया जा सकता है, इसलिए मैं दो तर्क, नया नाम (एक कीवर्ड के रूप में) और पुराना नाम (फ़ंक्शन संदर्भ के रूप में) लेने के लिए अपने उपनाम फ़ंक्शन को पैरामीटर करना चाहता था। इस लक्ष्य की ओर प्रयास करने में, मुझे दो समस्याएं आई हैं।
1) कीवर्ड के साथ नामित कार्यों को परिभाषित करने से त्रुटियां फेंकता है। जाहिर है यह clojure.lang.IObj
चाहता है।
user=> (defn :foo "bar")
java.lang.ClassCastException: clojure.lang.Keyword cannot be cast to clojure.lang.IObj (NO_SOURCE_FILE:0)
वहाँ एक IObj, या अन्य साधनों के लिए एक खोजशब्द कास्ट करने के लिए कुछ प्रदान किया गया मान के साथ एक नव परिभाषित समारोह के नाम पर parameterize करने के लिए एक समारोह है? (रूबी में, define_method अन्य तकनीकों के साथ यह करता है)
irb(main)> self.class.instance_eval do
irb(main)* define_method(:foo) { "bar" }
irb(main)> end
=> #<Proc>
irb(main)> foo
=> "bar"
2) एक समारोह में सभी तर्कों को एक चर में एकत्रित करें। यहां तक कि (+ 1 2 3 4)
जैसे बुनियादी कार्य भी तर्कों की एक परिवर्तनीय मात्रा लेते हैं। फ़ंक्शन बॉडी में हैंडलिंग के लिए सूची में सबकुछ एकत्र करने के लिए कोई भी तरीका नहीं है, मैंने अब तक की सभी फ़ंक्शन परिभाषा तकनीकों को तर्क दिया है। एक बार फिर, मैं क्या कर रहा हूं रूबी में ऐसा किया जाता है:
irb(main)> def foo(*args)
irb(main)> p args
irb(main)> end
=> nil
irb(main)> foo(1, 2, 3)
[1, 2, 3]
=> nil
किसी भी मदद के लिए धन्यवाद जो आप मुझे प्रदान कर सकते हैं!
बस पिछले अनुच्छेद में दिए गए डिज़ाइन को महसूस करने वाले 'इंटर्न-एलियास' फ़ंक्शन के साथ एक गिस्ट पोस्ट किया गया। मैं एक सेकंड में एक डॉकस्ट्रिंग जोड़ दूंगा। यह मेटा को मूल से उपनाम में प्रतिलिपि बनाता है, वर्तमान के अलावा नामस्थानों में उपनाम बनाने का समर्थन करता है, दोनों प्रतीकों और वर्रों को मूल और सी के रूप में स्वीकार करता है। Http://gist.github.com/464970 –
देखें, दोस्त आओ। कम से कम अन्य लोगों को मौका दें! क्या आपकी खुफिया स्तर को वापस * सामान्य * तक कम करने के लिए आप कुछ प्रकार की दवा नहीं ले सकते हैं? हमारे पास वापस आओ, भाई, हम आपको याद करते हैं। : पी – Rayne
गहन टिप्पणी के लिए धन्यवाद। यह निश्चित रूप से जो कुछ मैं ढूंढ रहा था, वह निश्चित रूप से प्रकाशित हुआ। बिंदु # 3 के संबंध में (वर्णों को प्रतीकों द्वारा नामित किया गया है, कीवर्ड नहीं), क्या किसी कीवर्ड को प्रतीक में रखने का कोई तरीका है? कहें, एक अभ्यास के लिए मैं एक फ़ंक्शन लिखना चाहता था जो डिफ को लपेटता था, और दो तर्क, एक कीवर्ड और एक मान लेता था, और फिर आंतरिक रूप से डीफ़ कहा जाता था और कीवर्ड का नाम बदलता था। मुमकिन? –