Elm Generator Int - >列表Int

时间:2017-11-25 07:37:15

标签: elm

我想从List

中获取Generator
intList : Generator (List Int)
intList =
    list 5 (int 0 100)

我现在怎样才能得到一份清单?

2 个答案:

答案 0 :(得分:4)

您无法从Generator中获取随机列表,因为Elm函数始终是纯粹的。获取列表的唯一可能是使用命令

命令是一种告诉Elm运行时执行一些不纯操作的方法。在您的情况下,您可以告诉它生成一个随机的整数列表。然后它将返回该操作的结果作为update函数的参数。

要向Elm运行时发送一个生成随机值的命令,您可以使用函数Random.generate

generate : (a -> msg) -> Generator a -> Cmd msg

您已经有Generator a(您的intList),因此您需要提供a -> msg功能。此函数应将a(在您的情况下为List Int)包装到消息中。

最终代码应该是这样的:

type Msg =
    RandomListMsg (List Int)
  | ... other types of messages here

update : Msg -> Model -> ( Model, Cmd Msg )
update msg model = case msg of
    ... -> ( model, Random.generate RandomListMsg intList)
    RandomListMsg yourRandomList -> ...

如果您还不了解消息模型,您可能应首先了解Elm architecture

答案 1 :(得分:2)

您可以向Random.step提供自己的种子值,这将返回包含列表和下一个种子值的元组。这样可以保持纯度,因为当您传递相同的种子时,您将始终获得相同的结果。

Random.step intList (Random.initialSeed 123)
    |> Tuple.first

-- will always yield [69,0,6,93,2]

@ZhekaKozlov给出的答案通常是如何在应用程序中生成随机值,但它使用Random.step,并将当前时间用作初始种子。