这不是一条记录,因此没有可访问的字段?

问题描述 投票:0回答:1

我的 ELM 项目有问题。我这里有这个函数,但是我在 Interval.start 和 Interval.end 处遇到问题(这不是一条记录,所以它没有可访问的字段!)。这怎么可能,就在几行之前,我也声明了这一点。我使用的函数也是 Date.dateToStringForView,它位于另一个文件中,但我不认为这是问题所在。我该如何解决这个问题?

谢谢!

dateToStringForView : Date -> String
dateToStringForView (Date d) =
    case d.month of
        Just m -> monthToString m ++ " " ++ String.fromInt d.year
        Nothing -> String.fromInt d.year

type Interval
    = Interval { start : Date, end : Maybe Date }
view : Interval -> Html msg
view interval = 
    let
        startText =
            div [class "interval-start"] [text (Date.dateToStringForView interval.end)]

        endText =
            case interval.end of
                Just endDate ->
                    div [class "interval-end"] [text (Date.dateToStringForView endDate)]

                Nothing ->
                    div [class "interval-end"] [text "Present"]
        
        lengthText =
            case length interval of
                Just (years, months) ->
                    div [class "interval-length"] [text (String.fromInt years ++ " years, " ++ String.fromInt months ++ " months")]

                Nothing ->
                    text ""
    in
    div [class "interval"]
        [ --startText
        --, endText,
        lengthText
        ]
elm
1个回答
0
投票

Interval
不是记录类型。它是一种自定义类型,具有名为 的单个变体,该变体具有记录作为有效负载。您要么在使用时必须从变体中解压记录,要么一开始就不将其放入自定义类型中。

要打开包装,只需执行以下操作:

view : Interval -> Html msg
view (Interval interval) = ...

要使

Interval
成为记录类型(或者更确切地说是类型别名,因为记录类型是结构性的并且不需要命名):

type alias Interval = { start : Date, end : Maybe Date }
© www.soinside.com 2019 - 2024. All rights reserved.