gpt4 book ai didi

performance - 慢 Scala 断言

转载 作者:行者123 更新时间:2023-12-03 11:20:37 24 4
gpt4 key购买 nike

我们最近一直在分析我们的代码,我们遇到了一些烦人的热点。他们在形式

assert(a == b, a + " is not equal to " + b)

因为这些断言中的一些可以在被调用的代码中被大量调用,字符串 concat 开始累加。 assert定义为:
def assert(assumption : Boolean, message : Any) = ....

为什么它没有定义为:
def assert(assumption : Boolean, message : => Any) = ....

这样它就会懒惰地评估。鉴于它没有以这种方式定义,是否有内联方式使用延迟评估的消息参数调用断言?

谢谢

最佳答案

惰性求值对于创建的函数对象也有一些开销。如果您的消息对象已经完全构造(静态消息),则不需要此开销。

适合您的用例的方法是 sprintf 风格:

assert(a == b,  "%s is not equal to %s", a, b)

只要有专门的功能
assert(Boolean, String, Any, Any)

此实现没有开销或 var args 数组的成本
assert(Boolean, String, Any*)

对于一般情况。

实现 toString 将被惰性评估,但不可读:
assert(a == b, new { override def toString =  a + " is not equal to " + b })

关于performance - 慢 Scala 断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2425091/

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