Clojure 및 Seesaw를 사용하여 기능별 스타일로 GUI 기반 이벤트를 작성하는 데 문제가 있습니다. 특히 전역을 사용하지 않고 프로그램 상태를 전달하는 방법이나 다른 불쾌한 해킹 방법을 알아낼 수는 없습니다.기능별 이벤트 기반 프로그래밍
(defn event-handler [gui-state event]
(update-gui! (get-new-state gui-state event)))
(defn update-gui! [gui-state]
(remove-all-listeners (gui-state :button))
(seesaw.core/listen (gui-state :button)
:action
(partial event-handler gui-state)))
그것은 기존의 수신기를 제거 포함 GUI를, 국가를 발전하고 업데이트 할 수있는 부분적으로 적용 기능, 관련 구성 요소에 이벤트 리스너를 설정 : 내 현재의 접근 방식은 다음과 같이한다. 이것이 작동하는 것처럼 보이지만 실제로는 상태에서 청취자 자체를 전달할 수 없기 때문에 (부분적으로는 상태를 정의한 후에 구성되지 않기 때문에) 청취자를 제거 할 필요가 있습니다. 프로그램이 커짐에 따라 문제를 일으킬 수있는 모든 리스너를 제거합니다.
온라인에서 찾은 가장 가까운 해결책은 this answer입니다.하지만 이벤트를 스트림처럼 처리하는 방법을 알지 못합니다. 나는 현재의 접근 방식보다 더 나은 해결책이 있어야한다고 확신하지만, 나는 무엇을 알아낼 수 없다.
기능적 스타일을 따르면서 사용자 입력 이벤트에 어떻게 대응할 수 있습니까?
작동하는 것처럼 보이며 매우 간단합니다. 감사. – resueman