की तरह उपयोग कर सकते हैं
syntax-quote
, unquote
, और unquote-splicing
का बिंदु डेवलपर को मैक्रोज़ लिखने में मदद करना है। - नहीं repl
user=> `(:a ~extra-values)
(:a [1 2 3 4])
पूर्व के मामले में यह पाठक के लिए कठिन (मानव पाठक है में:
उदाहरण के लिए, syntax-quote
और unquote
बिना आप
user=> (list :a extra-values)
(:a [1 2 3 4])
बजाय
लिखने के लिए होता है) यह समझने के लिए कि परिणामस्वरूप फॉर्म कैसा दिख रहा है, जबकि बाद वाला मामला परिणामी रूप के 'आकार' को बनाए रखता है।
तो vector
[1 2 3 4]
के बजाय यदि हम extra-values
की सामग्री को परिणामी रूप में विभाजित करना चाहते हैं तो क्या होगा?हम unquote-splicing
की जरूरत है ताकि हम लिख सकते हैं:
user=> `(+ 100 200 [email protected])
(clojure.core/+ 100 200 1 2 3 4)
के बजाय:
user=> (concat `(+ 100 200) extra-values)
(clojure.core/+ 100 200 1 2 3 4)
फिर unquote-splicing
संस्करण जिसके परिणामस्वरूप फ़ॉर्म के 'आकार' जब कोड मूल्यांकन किया जाता है के समान कोड की अनुमति देता है, जबकि बाद के संस्करण में 'आकार' apply
और list
के शोर में खो जाता है।
ये दोनों उदाहरण बहुत ही सरल हैं, लेकिन syntax-quote
और अधिक जटिल मैक्रोज़ लिखते समय दोस्त वास्तव में अपने आप आते हैं।
आप अपने प्रश्न पर वापस आ रहे हैं कि आप (+ 1000 [email protected])
क्यों नहीं लिख सकते हैं?
user=> (apply + 1000 extra-values)
1010
शायद भाषा के लिए "सामान्य" सुविधा के साथ भाषा के "मेटा" सुविधा के मिश्रण से बचने के लिए :) – Ankur