Clojure - ผู้เฝ้าดู
Watchersเป็นฟังก์ชันที่เพิ่มให้กับประเภทตัวแปรเช่นอะตอมและตัวแปรอ้างอิงซึ่งจะถูกเรียกใช้เมื่อค่าของประเภทตัวแปรเปลี่ยนแปลง ตัวอย่างเช่นหากโปรแกรมเรียกใช้เปลี่ยนค่าของตัวแปรอะตอมและถ้าฟังก์ชันผู้เฝ้าดูแนบกับตัวแปรอะตอมฟังก์ชันจะถูกเรียกใช้ทันทีที่ค่าของอะตอมเปลี่ยนไป
ฟังก์ชั่นต่อไปนี้มีอยู่ใน Clojure for Watchers
เพิ่มนาฬิกา
เพิ่มฟังก์ชั่นนาฬิกาให้กับการอ้างอิงตัวแทน / อะตอม / var / ref นาฬิกา‘fn’ต้องเป็น 'fn' จาก 4 args: คีย์การอ้างอิงสถานะเก่าสถานะใหม่ เมื่อใดก็ตามที่สถานะของการอ้างอิงอาจมีการเปลี่ยนแปลงนาฬิกาที่ลงทะเบียนใด ๆ จะมีฟังก์ชันที่เรียกว่า
ไวยากรณ์
ต่อไปนี้เป็นไวยากรณ์
(add-watch variable :watcher
(fn [key variable-type old-state new-state]))
Parameters- 'ตัวแปร' คือชื่อของอะตอมหรือตัวแปรอ้างอิง 'variable-type' คือประเภทของตัวแปรทั้งอะตอมหรือตัวแปรอ้างอิง 'old-state & new-state' คือพารามิเตอร์ที่จะเก็บค่าเก่าและใหม่ของตัวแปรโดยอัตโนมัติ "คีย์" จะต้องไม่ซ้ำกันต่อการอ้างอิงและสามารถใช้เพื่อถอดนาฬิกาออกโดยถอดนาฬิกาได้
Return Value - ไม่มี
ตัวอย่าง
ตัวอย่างวิธีการใช้จะแสดงในโปรแกรมต่อไปนี้
(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)
เอาต์พุต
โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้
The value of the atom has been changed
old-state 0
new-state 2
ถอดนาฬิกา
ลบนาฬิกาที่ติดอยู่กับตัวแปรอ้างอิง
ไวยากรณ์
ต่อไปนี้เป็นไวยากรณ์
(remove-watch variable watchname)
Parameters- 'ตัวแปร' คือชื่อของอะตอมหรือตัวแปรอ้างอิง 'watchname' คือชื่อที่กำหนดให้กับนาฬิกาเมื่อมีการกำหนดฟังก์ชันนาฬิกา
Return Value - ไม่มี
ตัวอย่าง
ตัวอย่างวิธีการใช้จะแสดงในโปรแกรมต่อไปนี้
(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)
เอาต์พุต
โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้
The value of the atom has been changed
old-state 0
new-state 2
คุณสามารถเห็นได้อย่างชัดเจนจากโปรแกรมด้านบนว่าคำสั่งรีเซ็ตครั้งที่สองไม่ทริกเกอร์ผู้เฝ้าดูเนื่องจากถูกลบออกจากรายการของผู้เฝ้าดู