2017-10-17 64 views
1

在函数式编程语言,可以添加一个条件,模式匹配的一个分支:例如,OCaml中:如何将条件添加到匹配的情况下,...的

let value = match something with 
| OneThing -> "1" 
| Another when condition -> "2" 
| _ -> "3" 

怎么办这在榆树?我试过whenif,但没有奏效。

回答

5

Elm在模式匹配中没有条件,可能是因为语言设计者倾向于保持语法小而简单。

你能做的最好的是这样的:

let 
    value = 
     case something of 
      OneThing -> 
       "1" 

      Another -> 
       if condition then 
        "2" 
       else 
        ... 

      _ -> 
       "3" 
3

作为替代使用ifcase分支内,你可能会想匹配对含条件,这看起来像一个元组这个:

let 
    value = 
     case (something, condition) of 
      (OneThing, _) -> 
       "1" 

      (Another, True) -> 
       "2" 

      _ -> 
       "3" 
+0

这个解决方案只有在分支有一个条件时才是好的。如果你想要两种不同的条件,那是不可能的。 – Boiethios

+0

@Boiethios,如果你引入了多个条件,它肯定会变得更加有趣,我建议在这种情况下切换到'if' /'else'。然而,我不认为有两个不同的条件是不可能的,你只需在你匹配的元组中添加另一个元素。见https://ellie-app.com/mkqNvychwa1/0,如果我错过了你的意思,请告诉我 – bdukes

+0

你说得对,我没有想过。但是,正如您所说,这种方法会在添加条件的同时快速混淆代码。在我的学习项目中,我切换到了“如果”......“其他”。从elm团队这样做的选择不要*保持语言“简单”IMO,因为它会强制编写较少可读的代码(例如:https://gitlab.com/snippets/1679916#L73)也许我会在他们的存储库中发布这个信息。 – Boiethios

相关问题