2016-04-04 13 views
1

シグナルが与えられた場合、どのようにしてその歴史的価値が得られますか?elm - シグナルの歴史的価値

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

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

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

よう

何か私はSignal.foldpを使用して試してみたが、それはイベントの数に依存する電流または累積値を返すのいずれかのようです。

答えて

3

エルムが独自に履歴値を追跡しませんが、あなたはこのような信号のいずれかのタイプのリストを構築するために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のタイムトラベルデバッガは、デバッグの目的でのみ履歴を保持します。これは通常、プロダクションでは望むものではありません。

+0

ありがとうございます - 私はそれを 'Signal.map show <|現在および現在のシグナル値を保持するために、例えば、Signal.map2 getHistory(Signal.constant 2)(makeHistory Mouse.isDown)上記の 'history'関数が'(::) '演算子をどのように使っているかは非常に驚くべきことです。 – category