我刚接触 Elm,一直在研究以下示例(请注意此示例是在新的 0.17 架构下编写的,其中 Action 现在称为 Command):http://elm-lang.org/examples/random
这个示例有一个后续挑战,就是添加第二个骰子,这样单击按钮就可以为每个骰子掷出新值。我的想法是更改模型以容纳两个分开的值,每个骰子一个值,类似于
type alias Model =
{ dieFace1 : Int
, dieFace2 : Int
}
在更新块之前,这个方法都能够正常工作。但是我不确定如何更新随机数生成器以创建两个值。这个函数对我来说有点混乱。
type Msg
= Roll
| NewFace Int Int
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
Roll ->
**(model, Random.generate NewFace (Random.int 1 6))** <-- not sure what to do here
NewFace newFace1 newFace2 ->
(Model newFace1 newFace2, Cmd.none)
Random.generate函数的文档有点简略 -
generate : (a -> msg) -> Generator a -> Cmd msg
创建一个命令,用于生成随机值。
这是处理两个骰子的正确方法吗?还是有更好的方式?我是elm新手,请友善一点 :)
Int
元组,而是 两个Int
参数,解决方案会是什么样子呢?也就是说,如果Msg
被定义为NewFaces Int Int
,这是由 OP 所推测的? - Lars BlumbergNewFaces2 Int Int
,那么你的update
处理程序可能如下所示:(model, Random.generate (uncurry NewFaces2) diePairGenerator)
。函数uncurry
将获取元组参数并将其值作为两个参数传递到NewFaces2
中。 - Chad Gilbert