OCaml是否可以创建单个if(没有其他)

时间:2013-10-12 20:09:50

标签: ocaml control-structure

是否可以创建单个if(没有其他)? 如果

,可以使用一个非常有用

1 个答案:

答案 0 :(得分:12)

阅读Ocaml手册的control structures : conditional部分§6.7.2。

只有当else部分(因此整个then表达式)属于if类型时,才能避免unit。例如

let x = 3 in
   ( if x > 0 then Printf.printf "x is %d\n" x );
   x + 5
;;

应打印x is 3,并返回值为8。

一般规则是if κ then τ相当于if κ then τ else ()因此“then part”τ必须是unit类型,而“else part”是默认的至(),以便整个if属于unit类型。

<击>

<击>
let x = 3 in ( if x > 0 then "abc" ); x + 7 (*faulty example*)

<击>

由于"abc"不属于unit类型(如()所有),

甚至无法编译

您可能有时使用ignore部分的then功能(来自Pervasives)强制它为unit类型(但是只有当它有重要 side-effects时才值得;如果你用"abc"替换ignore "abc"那么我的错误示​​例会编译,但仍无用)。

但是,不要忘记 Ocaml只有表达式(但没有语句)。副作用表达式通常为unit类型(但你可以,但通常不赞成,定义一个函数来计算一些非unit结果有用副作用)。