Scala使用Mixins进行类组合
来源:互联网 发布:cms内容管理系统 编辑:程序博客网 时间:2024/06/10 02:34
Mixins是用于进行类组合的特征。
abstract class A { val message: String}class B extends A { val message = "I'm an instance of class B"}trait C extends A { def loudMessage = message.toUpperCase()}class D extends B with Cval d = new Dd.message // I'm an instance of class Bd.loudMessage // I'M AN INSTANCE OF CLASS B
D
类有一个父类B和一个mixin C
。每个类只能有一个父类但是可以有多个mixins(分别使用关键字extends
和with
)。mixins和父类可能有相同的父类型。
下面是一个更有意思的示例:
abstract class AbsIterator { type T def hasNext: Boolean def next: T}
上面的类有一个抽象类型T和一个标准迭代器方法。
下面,我们会实现一个具体的类(所有抽象成员T
,hasNext
和next
都会实现):
class StringIterator(s: String) extends AbsIterator { type T = Char private var i = 0 def hasNext = i < s.length def next = { val ch = s charAt i i += 1 ch }}
StringIterator
有一个String
并可用于遍历字符串(如,查看字符串是否包含特定字符)。
下面创建一个特征扩展AbsIterator
。
trait RichIterator extends AbsIterator { def foreach(f: T => Unit): Unit = while (hasNext) f(next)}
因为RichIterator
是一个特征,所以不需要实现AbsIterator
中的抽象成员。
将StringIterator
和RichIterator
的功能组合到一个类中。
object StringIteratorTest extends App { class Iter extends StringIterator(args(0)) with RichIterator val iter = new Iter iter foreach println}
类Iter
的父类是StringIterator
,mixin是RichIterator
。
单一继承无法有这样的灵活程度。
0 0
- Scala使用Mixins进行类组合
- Ext4 组合 mixins
- Sass中的mixins混合使用
- Vue.js Mixins 混入使用
- Scala中使用Future进行并发处理
- Spark程序进行单元测试-使用scala
- Scala使用Actor进行并发编程
- Sass->什么时候使用Mixins 和 Placeholders
- vue-mixins使用注意事项和高级用法
- 在Vue.js中使用Mixins
- 在Vue.js中如何使用Mixins?
- VUE项目开发中使用mixins
- vi 替换时使用 "\("、"\)" 进行再组合
- scala函数组合
- scala-继承与组合
- scala编程语言使用slick进行数据库操作
- 使用IDEA进行scala/java混合工程的构建
- spark scala 对dataframe进行过滤----filter方法使用
- j解析json
- FastDFS安装、配置、部署(一)-安装和部署
- nmap 参数
- gtk3.0学习笔记4-构建用户界面
- eCall
- Scala使用Mixins进行类组合
- Struts2第九篇【OGNL、valueStack详解】
- Visionect产品介绍
- android 时间获取以及时间格式化
- 数字和字符串之间的转换
- 电子商城
- ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
- NS3
- react 之 事件处理