1
在函数式编程语言,可以添加一个条件,模式匹配的一个分支:例如,OCaml中:如何将条件添加到匹配的情况下,...的
let value = match something with
| OneThing -> "1"
| Another when condition -> "2"
| _ -> "3"
怎么办这在榆树?我试过when
和if
,但没有奏效。
在函数式编程语言,可以添加一个条件,模式匹配的一个分支:例如,OCaml中:如何将条件添加到匹配的情况下,...的
let value = match something with
| OneThing -> "1"
| Another when condition -> "2"
| _ -> "3"
怎么办这在榆树?我试过when
和if
,但没有奏效。
Elm在模式匹配中没有条件,可能是因为语言设计者倾向于保持语法小而简单。
你能做的最好的是这样的:
let
value =
case something of
OneThing ->
"1"
Another ->
if condition then
"2"
else
...
_ ->
"3"
作为替代使用if
的case
分支内,你可能会想匹配对含条件,这看起来像一个元组这个:
let
value =
case (something, condition) of
(OneThing, _) ->
"1"
(Another, True) ->
"2"
_ ->
"3"
这个解决方案只有在分支有一个条件时才是好的。如果你想要两种不同的条件,那是不可能的。 – Boiethios
@Boiethios,如果你引入了多个条件,它肯定会变得更加有趣,我建议在这种情况下切换到'if' /'else'。然而,我不认为有两个不同的条件是不可能的,你只需在你匹配的元组中添加另一个元素。见https://ellie-app.com/mkqNvychwa1/0,如果我错过了你的意思,请告诉我 – bdukes
你说得对,我没有想过。但是,正如您所说,这种方法会在添加条件的同时快速混淆代码。在我的学习项目中,我切换到了“如果”......“其他”。从elm团队这样做的选择不要*保持语言“简单”IMO,因为它会强制编写较少可读的代码(例如:https://gitlab.com/snippets/1679916#L73)也许我会在他们的存储库中发布这个信息。 – Boiethios