加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

表现 – 慢Scala断言

发布时间:2020-12-16 09:12:57 所属栏目:安全 来源:网络整理
导读:我们最近一直在剖析我们的代码,我们遇到了一些烦人的热点.他们的形式 assert(a == b,a + " is not equal to " + b) 因为这些断言中的一些可以在代码中被称为大量的字符串concat开始加起来.断言定义为: def assert(assumption : Boolean,message : Any) = ..
我们最近一直在剖析我们的代码,我们遇到了一些烦人的热点.他们的形式

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

因为这些断言中的一些可以在代码中被称为大量的字符串concat开始加起来.断言定义为:

def assert(assumption : Boolean,message : Any) = ....

为什么不定义为:

def assert(assumption : Boolean,message : => Any) = ....

这样就可以懒洋洋地评价.鉴于没有定义这种方式是通过一个内联的方式来调用断言与消息param,被评估懒惰?

谢谢

解决方法

懒惰评估对于创建的功能对象也有一些开销.如果您的消息对象已经完全构建(静态消息),则此开销是不必要的.

适用于您的用例的方法将是sprintf样式:

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

只要有特殊功能

assert(Boolean,String,Any,Any)

这个实现没有开销或者var args数组的代价

assert(Boolean,Any*)

对于一般情况.

实现toString将被懒惰地评估,但不可读:

assert(a == b,new { override def toString =  a + " is not equal to " + b })

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读