tôi đã có một cái nhìn tại các tài liệu tham khảo: http://clojure.org/vars#Vars%20and%20the%20Global%20Environment, http://clojuredocs.org/clojure_core/clojure.core/bindingmục đích thực tế của các vars và ràng buộc năng động của clojure là gì?
cũng như clojure and ^:dynamic và Clojure Dynamic Binding
tôi vẫn không hiểu tại sao lại có một nhu cầu cho binding
ở tất cả như mọi chương trình tôi đã viết đã không có chúng và tôi có thể tìm cách viết các ví dụ theo cách thông thường - điều mà tôi thấy dễ hiểu hơn. Có những ví dụ về các dự án/mô hình lập trình sử dụng điều này không?
ví dụ ... trong động vật nói ví dụ, bạn có thể có được một hiệu ứng tương tự với:
(def dog {:name "Dog" :sound "Woof"})
(def cat {:name "Cat" :sound "Meow"})
(defn speak [animal]
(str (:name animal) " says " (:sound animal))
(println (speak dog))
(println (speak cat))
không macro, không năng động ràng buộc ... vẫn rất sạch sẽ.
Stuart Sierra nói về ý nghĩa của phạm vi động trong Clojure trong bài đăng trên blog này: http://stuartsierra.com/2013/03/29/perils-of-dynamic-scope –