榆树 - 信号的历史价值

elm - historic value of a signal

给定一个信号,如何获得它的历史值?

类似

--current value
Signal.pastValue(0, Mouse.x)

--previous value
Signal.pastValue(1, Mouse.x)

--previous nth value
Signal.pastValue(n, Mouse.x)

我试过使用 Signal.foldp,但它似乎是 returns 当前值或累积值,具体取决于事件编号。

Elm 不会自行跟踪历史值,但您可以使用 foldp 构建任何类型信号的列表,如下所示:

history : Signal a -> Signal (List a)
history =
  Signal.foldp (::) []

最新的信号值被添加到该列表中。要查看它的实际效果,您可以将这个完整示例传递到 http://elm-lang.org/try

import Graphics.Element exposing (show)
import Mouse

main =
  Signal.map show <| history Mouse.x

history : Signal a -> Signal (List a)
history =
  Signal.foldp (::) []

运行 该示例可能会阐明为什么默认情况下不保留历史值:您的内存很快就会膨胀。话虽这么说,elm-reactor 的时间旅行调试器保留了历史记录,但仅用于调试目的。这不是您在生产中通常想要的东西。