是否可以创建单个if(没有其他)? 如果
,可以使用一个非常有用答案 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
结果和有用副作用)。