【发布时间】:2011-12-07 22:25:32
【问题描述】:
我一直在尝试创建Functional Reactive Programming framework for Scala。目前我感到困惑的一件事是当前的实现如何处理表示顶层的行为。为了解释我的意思,我举个例子。假设我有一个 JPanel,我想这样做:
JPanel panel = new Panel()
panel.setBackground(new Behaviour(time => Color.red))
虽然这里的颜色是静态的,但我们希望面板背景在 Behavior 的值更新时更新。到目前为止,我所做的方式基本上是使用事件创建离散化的行为(可通过行为上的changes 函数访问)。这基本上只是行为发生变化时发生的事件源。在这里使用这个 setBackground 的实现将是:
def setBackground(color : Behaviour[Color]) {
super.setBackground(color.now)
color.changes.each(change => super.setBackground(change))
}
这感觉有点乱。有人对这是否是一种不好的方法有任何建议吗?我今天一直在看 Elliott 的Push-Pull FRP,感觉我可能会朝着正确的方向前进,但在某个地方迷路了。
编辑:如果没有人有明确的解决方案,那么想法/想法会很棒!
【问题讨论】:
-
我愿意为要求将论文翻译成 Scala 的问题添加一些赏金。
-
@ziggystar 我同意这将是惊人的。研究 FRP 的主要问题之一是必须爬过不熟悉的 Haskell 语法。不过,在 Stack Overflow 上要求这样做是否正确?
-
也许唯一的反对点是问题应该有合理的范围。因此,答案不应该太长。但我认为这个问题本身对 SO 来说是可以的。但是在合理的水平上翻译这篇论文需要一些时间。我更怀疑它会发布在博客上。
-
您可能会在这里得到答案:stackoverflow.com/questions/5095728/…
-
@Szabolcs 问题在于 Scala.react 并不是真正的 FRP。不过还是谢谢你的链接。
标签: user-interface scala programming-languages functional-programming frp