gpt4 book ai didi

scala - 为什么我要重新实现懒惰?

转载 作者:行者123 更新时间:2023-12-03 22:37:48 25 4
gpt4 key购买 nike

我正在阅读 Lazyness 上的部分[原文如此] 在 Twitter 的 Effective Scala 页面上,其中包括这个建议(重点是我的):

Use lazy fields for this purpose [computing and caching values on-demand], but avoid using lazyness when lazyness is required by semantics. In these cases it's better to be explicit since it makes the cost model explicit, and side effects can be controlled more precisely.



我不明白他们为什么要提出这个要求。为什么最好避免使用 lazy语义需要惰性的情况下的关键字(意味着它是程序正确性所必需的,而不仅仅是将其用作优化)。我不明白编写自己的惰性初始化代码会如何使惰性比使用 lazy 更清楚这一事实。关键字内置于语言中!我知道制作 lazy 需要一些额外的开销。领域线程安全,但我认为这不是他们在这里得到的......

使用 lazy 的本指南是否有一些隐藏的优点?我完全失踪了,还是我最好忽略这个建议?

最佳答案

编辑:我现在不再确定建议是什么,所以当谈到批评 Twitter 的建议时,请在下面提出我的观点。 (但我在下面给出了我自己的建议。)

我也不同意这些建议,但我(曾经)认为他们的观点是懒惰太容易了。您为访问惰性值付出了性能损失,但在使用点您没有注意到除了访问正常值之外您正在做任何事情。当然,这是使惰性 val 如此有用的一件事:您可以在惰性行为之间切换,并且根本不更改您的界面。但是,如果人们用 lazy 随机填充他们的代码,关键区域的性能可能会受到影响(假设它不超过惰性求值所弥补的),初始化顺序将更难预测(如果您正在执行很多副作用,则尤其重要),等等在。

即便如此,我认为是更糟糕的是明确但你必须遵守纪律。如果您不能指望文档或纪律,也许最好完全避免它。

关于scala - 为什么我要重新实现懒惰?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12959777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com