只是通過示例,並獲得有關創建2個隨機骰子並用按鈕滾動它們的練習。Elm - 初始化奇怪行爲的隨機數
http://guide.elm-lang.org/architecture/effects/random.html
所以我想我會創造骰子作爲一個模塊,取出滾動動作,只是把它創建初始化一個D6值。
所以我的代碼如下內容(應打開榆樹反應器直接)
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 ]
]
這裏的問題是,它總是產生相同的值。我以爲我的種子有問題,但是如果你改變了,但是如果你改變了
init =
(Model 0, (Random.generate NewFace (Random.int 1 6)))
init =
(Model 0, (Random.generate NewFace (Random.int 1 100)))
它的工作原理與預期完全一樣。所以它看起來像默認的發電機不工作的小值,似乎工作,作爲低至10.
奇怪的是,在這個例子中(我開始)http://guide.elm-lang.org/architecture/effects/random.html,它工作正常,1- 6,當它不在初始化。
所以我的問題是,我做錯了什麼,或者這只是榆樹的皺紋?我在init中的命令是否正確使用?
最後,我把這個放在了想要的效果上,這感覺很不可思議。
init =
(Model 0, (Random.generate NewFace (Random.int 10 70)))
與
NewFace newFace ->
(Model (newFace // 10), Cmd.none)
是的,一分鐘的一個新值就是我所看到的行爲。建議我提出了一個問題。 –