首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCaml返回值

OCaml返回值
EN

Stack Overflow用户
提问于 2011-06-15 06:40:58
回答 2查看 7.9K关注 0票数 8

在“用OCaml开发应用程序”一书中,有以下关于返回值的解释:

作为分号前面的值被丢弃,当它不是unit.print_int 1;2;3 ;;字符14-15时,目标CAML给出警告:警告:这个表达式应该有类型单元。为避免此消息,可以使用函数print_int 1;忽略2;3 ;;1-:int =3‘

我不明白为什么2的返回值与unit不同,因为我的目的不是返回2,而是返回3。按照我的理解,在我最后一条指令之前的任何指令都不是函数的返回值,那么为什么要发出警告呢?

我的代码中一直都有这样的警告,我越来越清楚,我并不真正理解返回值是如何在OCaml中真正工作的。

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-15 07:32:36

考虑一下表达式e1 ; e2。根据定义--评估整个表达式将导致对e1e2的计算,而整个表达式的结果值就是e2的值。e1的值结果被丢弃。如果e1的类型是unit,这不是问题,因为它有唯一的单一居民值()。对于所有其他类型,放弃e1的结果意味着丢失信息,这可能不是程序员想要的,因此出现了警告。程序员必须明确地忽略结果值,无论是使用ignore还是使用

代码语言:javascript
复制
let (_:type) = e1 in
e2

可以省略类型注释,但确保将e1完全计算为预期类型(而不是部分应用程序)可能是有用的。

票数 6
EN

Stack Overflow用户

发布于 2011-06-15 07:31:56

好吧,警告是存在的,因为您生成一个值但又不使用它这一事实(而且非常经常是)表明您正在做一些错误的事情。如果你不同意这个政策,你可以关掉这个警告。但是,与往常一样,最好不要这样做,在这种情况下,如果您真的不需要表达式的值,您确实可以使用忽略或绑定到_,就像在let _ = f() in ...中那样。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6353988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档