懒惰模块中有两种作用力:
似乎唯一的区别是
据我了解,如果我们使用Undefined
,我们是否会引发原始异常或force_val
。
那么这背后的意义是什么?为什么要这样呢?我们可以从force_val
获得任何好处?
最佳答案
我想这是出于性能目的。
如果您担心遇到相同的错误,请使用force
。如果您不想要但想要更好的性能,请使用force_val
。
如您所见here,force
与force_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/