我和榆树是新来的。榆树版本为0.19。我试图使用Ranndom.int来选择ship类型,但不知道如何做。我应该如何处理函数numToShip?改变类型?
这是我的密码。
type ShipType
= Battleship
| Cruiser
| Destroyer
| Submarine
numToShip : Int -> ShipType
numToShip num =
case num of
0 -> Destroyer
1 -> Battleship
2 -> Cruiser
_ -> Submarine
shipName : ShipType -> String
shipName shipType =
case shipType of
Destroyer ->
"Destroyer"
Battleship ->
"Battleship"
Cruiser ->
"Cruiser"
Submarine ->
"Submarine"
randomShip : String
randomShip =
shipName (numToShip (Random.int 0 3) )错误信息是:
The 1st pattern in this `case` causing a mismatch:
146| case num of
147|> 0 -> Destroyer
148| 1 -> Battleship
149| 2 -> Cruiser
150| _ -> Submarine
The first pattern is trying to match integers:
Int
But the expression between `case` and `of` is:
Random.Generator Int这些是无法匹敌的!这个模式是问题所在吗?还是这句话?
发布于 2019-06-21 14:11:18
Random.int不返回Int,而是返回Generator Int。然后,您将调用Random.generate将该Generator转换为Cmd,然后该Cmd将使用生成的值调用您的update函数。
Elm的一个特点是所有函数都是纯的,这意味着相同的输入总是导致相同的输出。由于每次调用函数时都要请求不同的值,所以需要将该命令传递给运行时,运行时可以处理请求的杂质(这与您希望通过HTTP或JavaScript与外部世界通信时发生的情况相同)。有关更多详细信息,请参阅 example in the Elm Guide。
或者,如果您愿意提供用于计算随机值的种子,则可以立即从Generator获得一个值。您可以使用Random.step,它接受一个Generator和一个Seed,并生成一个值和下一个种子,如果需要多个值,可以将该值反馈给step。只有在能够“重放”随机值的情况下,您可能才会想要这样做,因为保持Seed在附近是一种痛苦。否则,只需继续使用generate来创建Cmd。
https://stackoverflow.com/questions/56700834
复制相似问题