Có một số bài đăng trên blog hơi cũ ra có khuyến cáo thận trọng khi trộn các biến động, binding
và pmap
, ví dụ: here, nơi mà chúng tôi có được đoạn mã sau:thay đổi tương tác ràng buộc & pmap?
user=> (def *foo* 5)
#'user/*foo*
user=> (defn adder
[param]
(+ *foo* param))
#'user/adder
user=> (binding [*foo* 10]
(doseq [v (pmap adder (repeat 3 5))]
(println v)))
10
10
10
nil
Nhưng đó không phải là những gì xảy ra khi tôi chạy mã (thay đổi dòng đầu tiên để (def ^:dynamic *foo* 5)
). Tôi nhận được ba 15
s làm đầu ra (sử dụng Clojure 1.4), giống như bạn mong đợi không mong muốn — có nghĩa là, với sự thay đổi trong biểu mẫu ràng buộc được xem bởi hàm được chuyển đến pmap. Có cách thức ràng buộc thread-local và pmap tương tác thay đổi? Tôi không thể tìm thấy tài liệu này ở bất cứ đâu.
cảm ơn! tài liệu này ở đâu? nó không có trong http://dev.clojure.org/display/doc/1.3 –
chỉnh sửa để bao gồm các tham chiếu –
Cảm ơn! Đánh giá cao. –