【发布时间】:2014-03-06 04:01:55
【问题描述】:
假设我正在用 Scala 编写一个简单的 GUI 练习:窗口中有一个形状(例如圆形或方形),用户可以用鼠标拖动它。
我可以用 State 模式用 Java 编写它(请参阅下面的详细信息):
...
应用程序有 2 种状态:当用户拖动形状时,空闲状态和拖动状态。它以 IDLE 开头。
两种状态都处理 3 个鼠标事件:
- 鼠标按下
- 鼠标松开
- 鼠标移动
IDLE 处理鼠标事件如下:
- 鼠标按下如果鼠标位置在形状内部,则移动到拖动状态
- 鼠标释放和鼠标移动什么都不做
DRAGGING 按如下方式处理它们:
- 鼠标释放移动到空闲状态
- 鼠标释放什么都不做
- 在鼠标移动上移动形状
...
现在我想知道如何在 Scala 中以 函数式 的方式实现它。
这种计算看起来本质上是有状态的。你会建议使用 State monad 吗?
【问题讨论】:
-
状态机没有任何“非功能性”。事实上,一个FSM的正式定义is mostly a function, with a bunch of other stuff thrown in。
标签: scala user-interface functional-programming monads state-pattern