2016-04-04 26 views
1

Bir Sinyal verildiğinde, tarihsel değerleri nasıl elde edilir?elm - bir sinyalin tarihi değeri

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

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

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

Ben Signal.foldp kullanarak denedim, ama buna olay sayısına bağlı bir akım ya da birikmiş değeri döndürür ya görünüyor gibi

şey.

cevap

3

Elm kendi başına tarihsel değerlerin takip etmez, ancak böyle sinyalin herhangi türde bir liste oluşturmak için foldp kullanabilirsiniz: En son sinyal değeri o önüne edilir

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

liste. , Eylem görmek yapabildin bu tam örnekte geçmiş tarihsel değerler varsayılan olarak tutulmaz neden ışık tutabilir o örnek Koşu 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 (::) [] 

içine Kime: Hızlı bir şekilde hafıza kabartmak yapabilirsiniz. Olduğu söyleniyor, elm-reactor s zaman-seyahat hata ayıklayıcı, tarihin etrafında tutar, ancak sadece hata ayıklama amaçları için. Bu normalde üretimde isteyeceğin bir şey değil.

+0

Çok teşekkürler - 'Signal.map show <| Signal.map2 getHistory (Signal.constant 2) (makeHistory Mouse.isDown) 'örneğin mevcut ve mevcut Sinyal değerlerini korumak için. Yukarıdaki 'tarih' işlevinin '(: :)' operatörünü nasıl kullandığı oldukça şaşırtıcı. – category