2011-10-22 13 views
8

मैं टीडीडी के बारे में एक्शन अध्याय 8 में क्लोजर पढ़ रहा था और स्टबिंग मैक्रो के साथ प्रयोग किया था। यह कार्यों को रोकने के लिए गतिशील बाध्यकारी तंत्र का उपयोग करता है। हां, क्लोजर 1.3 में गैर-गतिशील वार्स के लिए बाध्यकारी तंत्र का उपयोग करना संभव नहीं है, इसलिए जब तक आप स्पष्ट रूप से एक कार्य को गतिशील बिंदुओं को इंगित नहीं करते हैं, तब तक अधिकांश मामलों में स्टबिंग मैक्रो काम नहीं करता है। तब मैंने सोचा कि मिडजे में कैसे रगड़ना है और 'प्रदान' के लिए स्रोत खोजने की कोशिश की, लेकिन मुझे यह नहीं मिला। तो यहां यह जाता है:मिडजे में एक तथ्य में 'प्रदान किया गया' कैसे लागू किया जाता है?

मिडजे में एक तथ्य में 'प्रदान किया गया' कैसे लागू किया जाता है? क्या कोई इसे विस्तार से समझा सकता है?

+2

आप https://groups.google.com/forum/#!forum/midje पर इस प्रश्न को दोबारा पोस्ट करके लाभ उठा सकते हैं। – user100464

उत्तर

10

Clojure 1.3 एक साथ-redefs मैक्रो वार्स के साथ भी काम करता है कि गतिशील घोषित नहीं किया गया है प्रदान करता है:

:

user=> (def this-is-not-dynamic) 
user=> (with-redefs [this-is-not-dynamic 900] this-is-not-dynamic) 
900 

पश्चगामी संगतता के लिए, Midje अपना संस्करण, जिसका हिम्मत इस तरह दिखना का उपयोग करता है

(defn alter-one-root [[variable new-value]] 
    (if (bound? variable) 
    (let [old-value (deref variable)] 
     (alter-var-root variable (fn [current-value] new-value)) 
     [variable old-value]) 
    (do 
     (.bindRoot variable new-value) 
     [variable unbound-marker]))) 
संबंधित मुद्दे