首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >`Lazy.force`与`Lazy.force_val`的区别

`Lazy.force`与`Lazy.force_val`的区别
EN

Stack Overflow用户
提问于 2014-04-25 12:30:04
回答 1查看 248关注 0票数 6

在懒散模块中有两种力量:

val强制:'a t -> 'a强制x强制悬挂x并返回其结果。如果x已被强制,则Lazy.force x将再次返回相同的值,而无需重新计算它。如果它引发异常,则再次引发相同的异常。如果x的强迫试图递归地强制x本身,则引发未定义的异常。

val force_val :a -> 'a force_val x强制暂停x并返回其结果。如果x已被强制,则force_val x再次返回相同的值,而无需重新计算它。如果x的强迫试图递归地强制x本身,则引发未定义的值。如果x的计算引发异常,则未指定force_val x是否会引发相同的异常或未定义的异常。

似乎唯一不同的是

如果x的计算引发异常,则未指定force_val x是引发同一异常还是未定义。

根据我的理解,如果我们使用Undefined,我们不知道它是否会引发原始异常或force_val

那这背后有什么意义?为什么要这样做?我们能从force_val那里得到的任何好处

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-25 12:55:12

我想是为了表演。如果您关心获得相同的错误,请使用force。如果您不想获得更好的性能,请使用force_val

正如您可以看到的,这里forceforce_val做同样的事情,但是在发生异常时执行对内存的额外访问。

在读取源代码和运行一些测试之后,这两个函数的行为似乎与文档中所说的不同:如果只使用force,则始终会得到原始错误,但如果使用force_val,则第一个调用将引发原始异常,而对force_val 或的所有后续调用都会引发Undefined

编辑:实际上,我不确定使用force_val而不是force是否会提高性能,因为force是一个原语,而force_val不是。

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

https://stackoverflow.com/questions/23293234

复制
相关文章

相似问题

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