scala使用impilct参数

版权声明:本文为博主原创文章,未经博主允许不得转载。 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的方法。

猜你喜欢

转载自blog.csdn.net/qq_29493353/article/details/84852646