我们真的’扩展’scala中的特征吗?
在学习
Scala时,我一直在努力理解一个特殊的细微差别:
特质测试 带测试的类Tester //#A:引发编译错误 class Tester扩展Test //#B:工作正常 现在,我们并没有真正扩展这个特性(或者我们是谁?).以下是我的问题: >扩展特质与扩展课程有何不同?它只是一个单一特征的特殊情况语法,我只是接受它作为语言的细微差别? Martin Odersky在对similar question的回应中表示,这是大会,但人们发现它令人困惑.我不确定为什么会出现这种情况或者导致这一决定的问题是什么?但这是他的回答:
虽然我可以忍受他的解释并重新思考我的想法(并且看到将课程改为特质的优势,仅仅是设计选择的副作用),我仍然希望更直观地理解这种细微差别. 解决方法
我可以向你展示一个例子,我觉得“扩展”特征的“概念”实际上是合乎逻辑的,
使用结构类型和自我引用特征的混合来查看以下代码, type Fooable = { def foo(): Unit } trait FooableExtra { self: Fooable => def omgWeCanFoo(): Unit = { println("foo :: by :: FooableExtra") self.foo() } } class OneThingWithFoo extends FooableExtra { def foo(): Unit = { println("foo :: by :: OneThingWithFoo") } def oneThing: Unit = {} } 我不能用语言来解释它,而且更直观一些……但是这就是让我在写A类扩展TraitA时有良心的原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- scala – 当需要的字段丢失时,是否可以使json4s不抛出异常?
- 如何将所需的验证应用于角度2的下拉列表
- 在bash中同时迭代两个数组
- angularjs – PouchDB 5.3.0 – 错误:数据库位置或iosData
- Angular 2 / Web Api – json解析错误语法错误意外的输入结
- angular – Ionic无法找到模块’../providers/auth-service
- scala – 如何在Naive Bayes模型的BinaryClassificationMet
- 构建基于CXF的WebService服务(2)-- 利用CXF提供的wsdl2ja
- Startup- and Shutdown sequence of OpenOffice.org
- angular – 如何使用* ngFor迭代对象键