我的 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
]
Interval
不是记录类型。它是一种自定义类型,具有名为 的单个变体,该变体具有记录作为有效负载。您要么在使用时必须从变体中解压记录,要么一开始就不将其放入自定义类型中。
要打开包装,只需执行以下操作:
view : Interval -> Html msg
view (Interval interval) = ...
要使
Interval
成为记录类型(或者更确切地说是类型别名,因为记录类型是结构性的并且不需要命名):
type alias Interval = { start : Date, end : Maybe Date }