表现 – 慢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 }) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |