Bas*_*tch 12
只有else当then部分(因此整个if表达式)属于unit类型时才能避免.例如
let x = 3 in
( if x > 0 then Printf.printf "x is %d\n" x );
x + 5
;;
Run Code Online (Sandbox Code Playgroud)
应该打印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*)
Run Code Online (Sandbox Code Playgroud)
甚至不会编译因为"abc"不是unit类型(像是())
你可能有时会使用ignore(从功能Pervasives)的then部分,迫使它是unit类型(但是这是值得的,只有当它有显著 的副作用 ;如果更换"abc"由ignore "abc"然后我错误的例子就是编译,但仍然没用).
但是,不要忘记Ocaml只有表达式(但根本没有语句).副作用表达式通常是unit类型(但你可以,但通常不赞成,定义一个计算一些非unit结果并具有有用的副作用的函数).
| 归档时间: |
|
| 查看次数: |
4033 次 |
| 最近记录: |