我想从List
Generator
intList : Generator (List Int)
intList =
list 5 (int 0 100)
我现在怎样才能得到一份清单?
答案 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
,并将当前时间用作初始种子。