功能等同于带有变量比较的if表达式

时间:2015-12-17 08:02:18

标签: f# functional-programming

我有一些复杂的if语句,它的可读性不是很好。它的工作方式类似于以下示例:

let a = 1
let b = 2
let test v = true
if a <> b then a - 1
else
   if (test a) then a + 1
   else a

有更好的功能解决方案吗?我想到了像

这样的东西
match a with
| b -> ...
| _ -> ...

但当然,这不起作用,因为b成为该声明中的内容。

2 个答案:

答案 0 :(得分:5)

没有什么&#39;无功能&#39;约if..then..else个表达式;甚至Haskell也有;)

虽然正如John Palmer的回答所示,你可以写

match a with
| foo when foo <> b -> a - 1
| foo when test foo -> a + 1
| _ -> a

你也可以写

if a <> b then a - 1
elif test a then a + 1
else a

就个人而言,在这种情况下,我更喜欢if..then..else语法,因为它略短,而且(IMO)更简洁。

答案 1 :(得分:3)

这是匹配的外观

match a with
|foo when foo=b -> ..
|foo when test foo -> ...
|_ -> a

您需要使用when