Clojure - Watchers
Watcherslà các hàm được thêm vào các kiểu biến như nguyên tử và biến tham chiếu được gọi khi giá trị của kiểu biến thay đổi. Ví dụ: nếu chương trình gọi thay đổi giá trị của một biến nguyên tử và nếu một hàm watcher được gắn vào biến nguyên tử, thì hàm sẽ được gọi ngay sau khi giá trị của nguyên tử được thay đổi.
Các chức năng sau có sẵn trong Clojure for Watchers.
add-watch
Thêm một hàm đồng hồ vào tham chiếu agent / atom / var / ref. Đồng hồ‘fn’phải là 'fn' gồm 4 args: khóa, tham chiếu, trạng thái cũ, trạng thái mới của nó. Bất cứ khi nào trạng thái của tham chiếu có thể bị thay đổi, mọi đồng hồ đã đăng ký sẽ có chức năng của chúng được gọi.
Cú pháp
Sau đây là cú pháp.
(add-watch variable :watcher
(fn [key variable-type old-state new-state]))
Parameters- 'biến' là tên của nguyên tử hoặc biến tham chiếu. 'kiểu biến' là kiểu của biến, nguyên tử hoặc biến tham chiếu. 'old-state & new-state' là các tham số sẽ tự động giữ giá trị cũ và mới của biến. 'key' phải là duy nhất cho mỗi tham chiếu và có thể được sử dụng để tháo đồng hồ bằng tháo đồng hồ.
Return Value - Không.
Thí dụ
Ví dụ về cách sử dụng điều này được hiển thị trong chương trình sau.
(ns clojure.examples.example
(:gen-class))
(defn Example []
(def x (atom 0))
(add-watch x :watcher
(fn [key atom old-state new-state]
(println "The value of the atom has been changed")
(println "old-state" old-state)
(println "new-state" new-state)))
(reset! x 2))
(Example)
Đầu ra
Chương trình trên tạo ra kết quả sau.
The value of the atom has been changed
old-state 0
new-state 2
tháo đồng hồ
Xóa đồng hồ đã được gắn vào biến tham chiếu.
Cú pháp
Sau đây là cú pháp.
(remove-watch variable watchname)
Parameters- 'biến' là tên của nguyên tử hoặc biến tham chiếu. 'watchname' là tên được đặt cho đồng hồ khi chức năng đồng hồ được xác định.
Return Value - Không.
Thí dụ
Ví dụ về cách sử dụng điều này được hiển thị trong chương trình sau.
(ns clojure.examples.example
(:gen-class))
(defn Example []
(def x (atom 0))
(add-watch x :watcher
(fn [key atom old-state new-state]
(println "The value of the atom has been changed")
(println "old-state" old-state)
(println "new-state" new-state)))
(reset! x 2)
(remove-watch x :watcher)
(reset! x 4))
(Example)
Đầu ra
Chương trình trên tạo ra kết quả sau.
The value of the atom has been changed
old-state 0
new-state 2
Bạn có thể thấy rõ ràng từ chương trình trên rằng lệnh đặt lại thứ hai không kích hoạt trình theo dõi vì nó đã bị xóa khỏi danh sách của người theo dõi.