首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Random.Generate Int的案例

Random.Generate Int的案例
EN

Stack Overflow用户
提问于 2019-06-21 09:42:37
回答 1查看 74关注 0票数 2

我和榆树是新来的。榆树版本为0.19。我试图使用Ranndom.int来选择ship类型,但不知道如何做。我应该如何处理函数numToShip?改变类型?

这是我的密码。

代码语言:javascript
复制
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) )

错误信息是:

代码语言:javascript
复制
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

这些是无法匹敌的!这个模式是问题所在吗?还是这句话?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56700834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档