2011-10-22 26 views
8

Tôi đã đọc Clojure trong Hành động chương 8 về TDD và thử nghiệm với các vĩ mô stubbing. Nó sử dụng cơ chế ràng buộc động cho các hàm sơ khai. Tuy nhiên, trong Clojure 1.3 không thể sử dụng cơ chế ràng buộc cho các vars không động, do đó macro cố định không hoạt động trong hầu hết các trường hợp, trừ khi bạn khai báo rõ ràng var trỏ đến một hàm động. Sau đó, tôi tự hỏi làm thế nào stubbing được thực hiện ở Midje và cố gắng tìm nguồn cho 'cung cấp', nhưng tôi không thể tìm thấy nó. Vì vậy, ở đây nó đi:Làm thế nào 'cung cấp' được thực hiện trong thực tế ở Midje?

Làm thế nào 'được cung cấp' được triển khai trong thực tế ở Midje? Ai đó có thể giải thích chi tiết này?

+2

Bạn có thể hưởng lợi bằng cách đăng lại câu hỏi này tại https://groups.google.com/forum/#!forum/midje. – user100464

Trả lời

10

Clojure 1.3 cung cấp một macro với-redefs mà làm việc ngay cả với vars chưa được tuyên bố động:

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

Đối với khả năng tương thích ngược, Midje sử dụng phiên bản của riêng mình, mà ruột trông như thế này:

(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]))) 
Các vấn đề liên quan