斯卡拉 – 特质中的懒惰断言
发布时间:2020-12-16 08:45:42 所属栏目:安全 来源:网络整理
导读:我发现我偶尔想在一个特征中写一个任意的断言,或者在我想要断言的东西尚未完全定义的其他地方. trait Foo { val aList: List[String] val anotherList: List[String] def printPairs = aList.zip(anotherList).foreach(println) assert(aList.size == anothe
我发现我偶尔想在一个特征中写一个任意的断言,或者在我想要断言的东西尚未完全定义的其他地方.
trait Foo { val aList: List[String] val anotherList: List[String] def printPairs = aList.zip(anotherList).foreach(println) assert(aList.size == anotherList.size) // NullPointerException,because these references are undefined right now. } 我想我正在寻找的一个概括是一个钩子(总是)在完全定义和实例化类之后触发,因为这是我通常在构造函数中放置的那种检查. 解决方法
您可以使用早期定义(在
Scala Language Reference中搜索更多信息)来实现它 – 与您编写的特征完全相同,您可以按如下方式扩展它:
class Bar(l1: List[String],l2: List[String]) extends { val aList = l1 val anotherList = l2 } with Foo 这将在调用断言之前启动列表,因此: new Bar(List("a","b"),List("c","d")) // built successfully new Bar(List("a","d","e")) // throws exception 当然 – 它并不完全是你所要求的(在构造之后总是被称为“钩子”),因为任何扩展类都必须知道哪些成员必须“早”被覆盖,但据我所知,这是你最接近的得到. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- AngularJS 自定义控件
- 积跬步,聚小流------Bootstrap学习记录(1)
- REST another WebService???
- angularjs – 在AWS CloudFront和S3上配置X-Frame-Options响
- killws 利用xfire部署webservice (xfire1.6+spring1.6+mave
- 解决接口调用黑洞,ESP接口服务管理平台介绍
- angularjs – ngAnimate,addClass回调在动画结束后不会运行
- Bash – 两个列表之间的区别
- WebService大讲堂之Axis2(5):会话(Session)管理
- 03 . Shell数组和函数