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

Hor*_*mke 2 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
Run Code Online (Sandbox Code Playgroud)

有更好的功能解决方案吗?我想到了类似的东西

match a with
| b -> ...
| _ -> ...
Run Code Online (Sandbox Code Playgroud)

但是,这当然不起作用,因为b成为该陈述中的一个.

Mar*_*ann 5

关于if..then..else表达没有什么"不起作用" ; 甚至Haskell也有;)

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

match a with
| foo when foo <> b -> a - 1
| foo when test foo -> a + 1
| _ -> a
Run Code Online (Sandbox Code Playgroud)

你也可以写

if a <> b then a - 1
elif test a then a + 1
else a
Run Code Online (Sandbox Code Playgroud)

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