ELM标记的联合类型比较构造函数



是否可以使用 ==比较榆树中标记的联合类型的构造函数,还是必须使用情况?

示例:

  type alias Model =
    { accessToken : String
    , page : Page
    , config : Config 
    } 
  type Page 
    = Home String
    | Profile String

   menu : Model -> Html Msg
   menu model = 
      div []
          [ a [ href "#home", classList [ ("active", model.page == Home) ] ][ text "Home" ]
          , a [ href "#profile", classList [ ("active", model.page == Profile)] ][ text "Profile" ]        
          ]

在示例中,我想编写诸如model.page == home之类的内容以检查当前页面是否在家,以便我可以将CSS类设置为" active"该链接,但似乎我好像我必须使用一个案例,我可以做,但是在这种情况下实施有点不错。

否,您不能使用==检查使用哪个构造函数来创建标记的联合值。我们通常这样做的方式是通过一些辅助功能:

isHome : Page -> Bool
isHome pg =
    case pg of
        Home _ -> True
        _ -> False
isProfile : Page -> Bool
isProfile pg =
    case pg of
        Profile _ -> True
        _ -> False

当调用时,这会导致同样可读的代码:

menu : Model -> Html Msg
menu model =
    div []
        [ a [ href "#home", classList [ ( "active", isHome model.page ) ] ] [ text "Home" ]
        , a [ href "#profile", classList [ ( "active", isProfile model.page ) ] ] [ text "Profile" ]
        ]

最新更新