9

是否可以创建单个 if(没有 else)?如果可以使用一个非常有用

4

1 回答 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 部分”默认为()所以整个ifunit类型。

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

甚至不会编译,因为"abc"不是unit类型(就像()是)

有时可能会在部件上使用该ignore函数(来自Pervasivesthen来强制它成为unit类型(但这仅在它具有显着 副作用时才值得;如果您替换"abc"ignore "abc"那时我的错误示​​例将编译,但仍然无用)。

但是,不要忘记Ocaml 只有表达式(但根本没有语句)。副作用表达式通常是类型(但您可以定义一个计算一些非结果具有有用副作用unit的函数,但这通常是不受欢迎的)。unit

于 2013-10-12T20:11:13.667 回答