Clojure-감시자
Watchers변수 유형의 값이 변경 될 때 호출되는 원자 및 참조 변수와 같은 변수 유형에 추가되는 함수입니다. 예를 들어, 호출 프로그램이 원자 변수의 값을 변경하고 감시자 함수가 원자 변수에 연결되어 있으면 원자 값이 변경되는 즉시 함수가 호출됩니다.
Clojure for Watchers에서 다음 기능을 사용할 수 있습니다.
추가 시계
agent / atom / var / ref 참조에 감시 기능을 추가합니다. 시계‘fn’4 개의 인수 (키, 참조, 이전 상태, 새 상태)의 'fn'이어야합니다. 참조의 상태가 변경 될 때마다 등록 된 모든 시계의 함수가 호출됩니다.
통사론
다음은 구문입니다.
(add-watch variable :watcher
(fn [key variable-type old-state new-state]))
Parameters− '변수'는 원자 또는 참조 변수의 이름입니다. '변수 유형'은 원자 또는 참조 변수의 변수 유형입니다. '이전 상태 및 새 상태'는 변수의 이전 값과 새 값을 자동으로 보유하는 매개 변수입니다. 'key'는 참조마다 고유해야하며 remove-watch로 시계를 제거하는 데 사용할 수 있습니다.
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
위의 프로그램에서 두 번째 재설정 명령이 감시자 목록에서 제거되었으므로 감시자를 트리거하지 않음을 분명히 알 수 있습니다.