繁体   English   中英

如何以功能方式进行此 Scala 练习?

[英]How to do this Scala exercise in functional way?

假设我正在用 Scala 编写一个简单的 GUI 练习:窗口中有一个形状(例如圆形或方形),用户可以用鼠标拖动它。

我可以使用State 模式用 Java 编写它(请参阅下面的详细信息):

...

应用程序有 2 种状态:空闲时没有任何反应,拖动时用户拖动形状。 它从空闲开始。

两种状态都处理 3 个鼠标事件:

  • 鼠标按下
  • 鼠标释放
  • 鼠标移动

IDLE 处理鼠标事件如下:

  • 如果鼠标位置在形状内,则按下鼠标时移动到拖动状态
  • 鼠标释放鼠标移动时什么都不做

DRAGGING 处理它们如下:

  • 鼠标松开时移动到空闲状态
  • 鼠标释放时什么都不做
  • 鼠标移动时移动形状

...

现在我想知道如何以函数方式在 Scala 中实现它。
这种计算看起来本质上是有状态的。 你会建议使用State monad吗?

这甚至可以通过简单的尾递归来处理,但这里的问题是“事件”。 这通常意味着控制反转。 如果您控制监听循环,那么您可以使用递归或状态 monad。 如果你不这样做,那么你最好的是功能反应式编程(FRP)

Scala 中至少有两个 FRP 框架。 一个是 EPFL,我不知道它与生产级别有多接近,也不知道确切的名称(虽然我认为它是 Reactive),另一个称为Reactive ,它相当成熟。 此外,它的作者查看了 Stack Overflow 上的 Scala 问题,因此您可能会在此处获得帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM