JS에서 배경 지식을 가진 엘름을 배우려고하고 강하게 그리고 정적으로 타입 된 언어에서 거의 경험하지 못했을 때, 나는 주요한 어려움이 타입 문법 (그리고 어떤 타입이 일반적으로 엘름에서 유용하게 사용되는지) . 불행히도, 나는 docs이이 점에서 매우 도움이되지 않는다는 것을 안다. 내가 여기에 간단한 예를 들자면 경우Elm의 유형 이해하기
: http://elm-lang.org/examples/buttons 라인 :
type Msg = Increment | Decrement
는 "인"으로 노동 조합 유형 Msg
을 정의하거나 Increment
또는 Decrement
. Increment
및 Decrement
도 유형 인 것으로 보입니다. 정확히 무엇입니까? (이 예제의 다른 곳에서는 정의되지 않았고 사전 정의 된 유형도 없습니다.)
그런 다음 onClick
인수로 view
함수에 사용됩니다. 이제 그들은 일종의 "메시지"(그것이 의미하는 것이 무엇이든)처럼 행동하는 것처럼 보입니다. JS에서 이것은 아마도 각각의 경우에 (가변적 인) 변수에 값을 할당함으로써 성취 될 것입니다 - 당연히 Elm 방식 일 수는 없습니다. 그렇다면 형식이 불변의 주제와 관련되어 작동하는 방식은 무엇입니까?
view
기능 : (누군가가 유용한 링크를 가리 수 있다면, 감사합니다!)
view model =
div []
[ button [ onClick Decrement ] [ text "-" ]
, div [] [ text (toString model) ]
, button [ onClick Increment ] [ text "+" ]
]
나는이 생각이 잠재적으로 폭 넓은 주제를 엽니 다하지만 내 질문은 : Increment
여기 Decrement
을 무엇입니까? 그들이 엘름 타입 시스템에 어떻게 들어 맞습니까?
느릅 나무 안내서에는 [연합 유형 여기] (https://guide.elm-lang.org/types/union_types.html)에 대한 자세한 토론이 있습니다. –
정의 된 공용체 타입'Msg'는 예제의 다른 곳에서 사용되지 않습니다. 우리는'update' 함수에서'case' 문을 사용할 수 있도록 이렇게 정의해야합니까? –
다른 함수들은이 예제에서 주석을 달지 않았기 때문에 다른 곳에서는'Msg'를 볼 수 없습니다. (엘름에서는 그렇지 않습니다. 그러나 함수에 주석을다는 것이 매우 유용 할 수 있습니다). 'Model'이'Int'의 타입 별명이라고 가정하면, 타입 주석은 다음과 같아야합니다.'view : model -> Html Msg'과'update : Msg -> Model -> Model' –