版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29493353/article/details/84852646
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 } object StringIterator{ def apply(j:String): StringIterator = new StringIterator(j) } }
trait RichIterator { def itr(a:Int)(implicit k:StringIterator): Unit ={ while (k.hasNext) println(k.next()) } }
class RichStringIter extends StringIterator("Scala") with RichIterator { def set(implicit a:List[T]):Unit = println(a) } object StringIteratorTest{ def main(args: Array[String]): Unit = { implicit var k = new StringIterator("wfg") richStringIter itr 1 } }
总结:trait RichIterator定义了一个方法并且实现了这个方法(类似java接口的default定义的方法),RichStringIter继承了一个抽象类和使用RichIterator的方法。itr方法定义了两个参数,一个是int,一个是隐式的StringIterator。所以只要
implicit var k = new StringIterator("wfg")
richStringIter itr 1
就能调用RichIterator的方法。