懒惰模块中有两种作用力:





似乎唯一的区别是



据我了解,如果我们使用Undefined,我们是否会引发原始异常或force_val

那么这背后的意义是什么?为什么要这样呢?我们可以从force_val获得任何好处?

最佳答案

我想这是出于性能目的。
如果您担心遇到相同的错误,请使用force。如果您不想要但想要更好的性能,请使用force_val

如您所见hereforceforce_val做相同的事情,但是在发生异常的情况下执行对内存的额外访问。

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

编辑:实际上,我不确定使用force_val而不是force会提高性能,因为force是原始类型,而force_val不是。

关于ocaml - `Lazy.force`和 `Lazy.force_val`之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23293234/

10-13 01:31