是否可以创建单个 if(没有 else)?如果可以使用一个非常有用
问问题
5947 次
1 回答
13
阅读控制结构: Ocaml 手册的条件部分§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 部分”τ
必须是unit
类型,“else 部分”默认为()
所以整个if
是unit
类型。
let x = 3 in ( if x > 0 then "abc" ); x + 7 (*faulty example*)
甚至不会编译,因为"abc"
不是unit
类型(就像()
是)
您有时可能会在部件上使用该ignore
函数(来自Pervasives)then
来强制它成为unit
类型(但这仅在它具有显着 副作用时才值得;如果您替换"abc"
到ignore "abc"
那时我的错误示例将编译,但仍然无用)。
但是,不要忘记Ocaml 只有表达式(但根本没有语句)。副作用表达式通常是类型(但您可以定义一个计算一些非结果并具有有用副作用unit
的函数,但这通常是不受欢迎的)。unit
于 2013-10-12T20:11:13.667 回答