OCaml返回值

| 在“使用OCaml开发应用程序”一书中,有关于返回值的以下解释:   由于分号前面的值将被丢弃,因此当Objective CAML不是单位类型时,它会发出警告。
# print_int 1; 2 ; 3 ;;
Characters 14-15:
Warning: this expression should have type unit.
1- : int = 3


To avoid this message, you can use the
function ignore:

# print_int 1; ignore 2; 3 ;; 
1- : int = 3`
我不明白为什么
2
的返回值与
unit
不同,因为我的意图不是返回
2
,而是返回
3
。以我的理解,最后一条指令之前的任何指令都不是函数的返回值,那么为什么要警告呢? 我在所有代码中都一直发出这个警告,对我来说很清楚,我不太了解OCaml中的返回值是如何工作的。 谢谢你的帮助。     
已邀请:
        考虑表达式
e1 ; e2
。根据定义-对整个表达式求值将对
e1
进行评估,然后对
e2
进行求值,整个表达式的结果值为
e2
e1
的取值结果被丢弃。如果
e1
的类型是
unit
,这不是问题,因为它只有一个居民值
()
。对于所有其他类型,丢弃“ 6”的结果意味着丢失信息,这可能不是程序员想要的,因此发出警告。程序员必须用
ignore
或显式地忽略结果值
let (_:type) = e1 in
e2
可以省略类型注释,但是确保将“ 6”完全评估为期望的类型(而不是部分应用程序)可能很有用。     
        很好,这里有警告,因为您产生了一个值,然后又不使用它,这可能(而且经常是)表明您做错了事。如果您不同意此政策,则可以关闭该警告。但是照常惯例,最好不要这样做,在这种情况下,如果确实不需要表达式的值,则可以使用忽略或将其绑定到
_
的方式,如in18ѭ那样。     

要回复问题请先登录注册