Mặc dù tôi không khuyên bạn nên trọng chức năng cốt lõi như +, bạn có thể sử dụng ràng buộc hoặc để cho điều này, nó phụ thuộc vào những gì bạn muốn hành vi:
(let [+ -] (reduce + [1 2 3])) ; -4
(defn my-plus [x] (reduce + x))
(let [+ -] (my-plus [1 2 3])) ;6
(binding [+ -] (my-plus [1 2 3])); -4
Giống như nó đã được nói trong các ý kiến dưới đây, ràng buộc không hoạt động theo cách này nữa kể từ clojure 1.3, kể từ khi var nên được năng động và +, -, vv không.
Vì mục đích thử nghiệm/chế nhạo, bạn có thể nhận được hành vi tương tự. Trong trường hợp đó nhìn vào với-redefs (kể từ clojure 1.3): http://clojuredocs.org/clojure_core/clojure.core/with-redefs
Xem thêm: Let vs. Binding in Clojure
Nguồn
2011-06-27 07:55:50
Để rõ ràng, đối với những người mới sử dụng Clojure, câu hỏi này không phải là 'ghi đè' theo nghĩa hướng đối tượng (Clojure không hướng đối tượng.) Thực sự câu hỏi đặt ra là làm thế nào để ngăn chặn cảnh báo được kích hoạt khi một var toàn cục được hồi phục. Ràng buộc đầu tiên xảy ra vì việc sử dụng macro 'ns' mang đến ánh xạ từ clojure.core. (xem http://clojure.org/namespaces) Ràng buộc thứ hai xảy ra khi một tệp cục bộ rebinds var. –
Ngoài ra, thuật ngữ khác: Clojure không có phương pháp. Nó có chức năng. –