Basta lavorare con i campioni e ottenere l'esercizio sulla creazione di 2 dadi casuali e ruotarli con un pulsante.Elm - Numero casuale su comportamento strano dell'iniziale
http://guide.elm-lang.org/architecture/effects/random.html
Così ho pensato di creare i dadi come modulo, rimuovere l'azione rotolo, e solo si crea un valore D6 su init.
Quindi il mio codice è ora la seguente (dovrebbe aprirsi diretta a Elm-reattore)
module Components.DiceRoller exposing (Model, Msg, init, update, view)
import Html exposing (..)
import Html.App as Html
import Html.Attributes exposing (..)
import Html.Events exposing (..)
import Random
import String exposing (..)
main =
Html.program
{ init = init
, view = view
, update = update
, subscriptions = subscriptions
}
-- MODEL
type alias Model =
{ dieFace : Int
}
init : (Model, Cmd Msg)
init =
(Model 0, (Random.generate NewFace (Random.int 1 6)))
-- UPDATE
type Msg
= NewFace Int
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
NewFace newFace ->
(Model newFace, Cmd.none)
-- SUBSCRIPTIONS
subscriptions : Model -> Sub Msg
subscriptions model =
Sub.none
-- VIEW
dieFaceImage : Int -> String
dieFaceImage dieFace =
concat [ "/src/img/40px-Dice-", (toString dieFace), ".svg.png" ]
view : Model -> Html Msg
view model =
let
imagePath =
dieFaceImage model.dieFace
in
div []
[ img [ src imagePath ] []
, span [] [ text imagePath ]
]
Il problema di questo è che è sempre producendo lo stesso valore. Ho pensato di avere un problema con il seme per cominciare, ma se si modifica
init =
(Model 0, (Random.generate NewFace (Random.int 1 6)))
init =
(Model 0, (Random.generate NewFace (Random.int 1 100)))
funziona esattamente come previsto. Quindi sembra che il generatore predefinito non funzioni con valori piccoli, sembra funzionare come in basso come 10.
La cosa strana è questa, in questo esempio (che ho iniziato con) http://guide.elm-lang.org/architecture/effects/random.html, funziona bene con 1- 6 quando non è in init.
Quindi la mia domanda è, sto facendo qualcosa di sbagliato, o questa è solo una ruga in olmo? Il mio uso del comando in init ok?
Alla fine, inserisco questo effetto per ottenere l'effetto desiderato, il che sembra tremante.
init =
(Model 0, (Random.generate NewFace (Random.int 10 70)))
con
NewFace newFace ->
(Model (newFace // 10), Cmd.none)
Sì, un nuovo valore al minuto era esattamente il comportamento che stavo vedendo. Ho sollevato un problema come suggerito. –