14

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

为此目的使用惰性字段[按需计算和缓存值],但在语义需要惰性时避免使用惰性。在这些情况下,最好是明确的,因为它使成本模型明确,并且可以更精确地控制副作用。

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

关于使用我完全错过的这个指南是否有一些隐藏的优点lazy,还是我最好忽略这个建议?

4

1 回答 1

6

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

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

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

于 2012-10-18T17:51:07.813 回答