gpt4 book ai didi

events - 函数式事件驱动编程

转载 作者:行者123 更新时间:2023-12-04 21:40:44 25 4
gpt4 key购买 nike

我无法使用 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 ,但我不知道如何将事件作为它显示的流处理。我确信一定有比我目前的方法更好的解决方案,但我不知道是什么。

谁能告诉我如何在仍然遵循功能风格的同时响应用户输入事件?

最佳答案

来自链接答案的 Streams 似乎是 core.async channel 的模拟。

每个事件可能会传入一个包含事件详细信息的 channel ,而不是删除所有监听器。同一个 channel 应该转到按钮的逻辑处理程序,在那里它会重复被取出。

关于events - 函数式事件驱动编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26921404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com