Elm中否定case语句的语法是什么?

时间:2018-08-11 00:35:31

标签: pattern-matching elm

我需要知道如何在ELM中做这样的事情。

case form.mode of
     "" ->  modeDropdown form

     (not "solo") -> do something for all other possibilities

这有可能吗?

编辑:

为了提供更广泛的背景信息,我正在尝试创建级联的下拉列表。如果我在url参数中收到模式的“”,则需要显示第一个下拉列表。如果我获得“独奏”,则无需显示任何内容。如果除了“ solo”之外还有其他选择,我必须显示第二个下拉列表。在我看来,我可以为“ solo”返回一个空的span标记,但这感觉有些hacky。

1 个答案:

答案 0 :(得分:4)

  

这有可能吗?

它在问题中的描述方式-不,因为需要在case表达式中提供模式,而不是布尔条件。但是可以通过以下方式执行:

case form.mode of
    "" ->  modeDropdown form
    "solo" ->
        -- do something for `"solo"` possibility
     _ ->
        -- do something for all other possibilities

您以这种方式提供exhaustive pattern matching,即e。所有情况都考虑在内。

关于评论部分中的问题:

  

Haskell语法为s | s / =“ solo”->做事情。榆树有这样的东西吗?

榆树中没有带守卫功能的语法,因此您需要使用if条件来模仿这种行为。或有elm-guards库,使它不再那么冗长。