Dan*_*Jr. 1 pattern-matching elm
我需要知道如何在 ELM 中做这样的事情。
case form.mode of
"" -> modeDropdown form
(not "solo") -> do something for all other possibilities
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?
编辑:
为了提供更广泛的上下文,我正在尝试创建级联向下列表。如果我在 url 参数中收到 "" for mode,我需要显示第一个下拉列表。如果我得到“独奏”,我不需要展示任何东西。如果我得到除“solo”之外的任何其他选择,我必须显示第二个下拉列表。我突然想到我可以为“solo”返回一个空的跨度标签,但这感觉有点麻烦。
这甚至可能吗?
它在问题中描述的方式 - 不,因为需要在case表达式中提供模式,而不是布尔条件。但它可以通过以下方式执行:
case form.mode of
"" -> modeDropdown form
"solo" ->
-- do something for `"solo"` possibility
_ ->
-- do something for all other possibilities
Run Code Online (Sandbox Code Playgroud)
这样你提供exhaustive pattern matching,即考虑所有情况。
关于评论区的问题:
Haskell 语法是 s | s /= "solo" -> 做事。榆树有这样的吗?
Elm 中没有带有守卫的函数的语法,因此您需要使用if条件来模仿这种行为。或者有elm-guards库,这使得它不那么冗长。