어떻게 내가 지금 그것의 목록을 얻을 수 Generator
느릅 나무 발전기 지능 -> 목록 지능
intList : Generator (List Int)
intList =
list 5 (int 0 100)
에서 List
을 얻으려면?
어떻게 내가 지금 그것의 목록을 얻을 수 Generator
느릅 나무 발전기 지능 -> 목록 지능
intList : Generator (List Int)
intList =
list 5 (int 0 100)
에서 List
을 얻으려면?
Elm 함수가 항상 순수하기 때문에 Generator
에서 임의의 목록을 가져올 수 없습니다. 목록을 얻는 유일한 방법은 명령을 사용하는 것입니다.
명령은 불완전한 작업을 수행하도록 Elm 런타임에 지시하는 방법입니다. 귀하의 경우에는 임의의 정수 목록을 생성하도록 지정할 수 있습니다. 그런 다음 해당 작업의 결과를 update
함수의 인수로 반환합니다. 당신이 함수 a -> msg
를 제공 할 필요가 있으므로,
generate : (a -> msg) -> Generator a -> Cmd msg
이미 Generator a
(당신의 intList
)가 :
Random.generate
를 사용하여, 임의의 값을 생성 느릅 나무 런타임에게 명령을 전송합니다. 이 함수는
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 처음에 익숙해해야합니다
마지막 코드는 그런 일해야한다.
이렇게 끝내게되었습니다. 그러나 왜 목록을 반환 할'Random.generate intList'를 실행할 수 없었는지 이해할 수 없습니다. 어떻게 이것이 순수 함수 개념을 깨뜨릴 수 있습니까? –
@MihkelL. 순수 함수는 항상 같은 값을 반환해야합니다. 함수는 매번 다른 목록을 반환하므로 순수할 수 없습니다. – ZhekaKozlov
Random.step
에 고유 한 시드 값을 제공 할 수 있습니다.이 값은 목록과 다음 시드 값이 포함 된 튜플을 반환합니다. 동일한 씨앗을 통과 할 때 항상 동일한 결과를 얻으므로 순도를 유지합니다. @ZhekaKozlov에 의해 주어진
Random.step intList (Random.initialSeed 123)
|> Tuple.first
-- will always yield [69,0,6,93,2]
대답은 당신이 응용 프로그램의 임의 값을 생성하는 방법을 일반적이지만, 초기 시드로 사용 된 현재 시간과 후드 Random.step
를 사용합니다.
이 예제가 실제 질문에 더 잘 응답한다고 생각합니다. 그러나 다른 대답은 아마도 "모범 사례"를 더 많이 보여줄 것입니다. 이 답변을 주셔서 감사합니다;) –
5 개의 난수 목록을 반환하는 함수가 순수하지 않을 수는 없습니다. 당신이 성취하고자하는 것에 대해 더 많이 말할 수 있습니까? 그리고 우리는 관용적 접근법을 찾을 수 있도록 도울 수 있습니다. –