Mixin在Scala中有什么好处?

时间:2016-06-05 11:46:56

标签: scala mixins

我正在阅读Scala Blog for Mixin,但我从他们在帖子上使用的代码中看不到优势。首先他们只使用主要方法中的特征方法,所以我不明白他们为什么不能扩展这个特性:

object StringIteratorTest {
  def main(args: Array[String]) {
    class Iter extends StringIterator(args(0)) with RichIterator
    val iter = new Iter
    iter foreach println
  }
}

我已尝试使用下面的代码,只是扩展特性使我能够访问特质和抽象类'方法。所以我的问题是:使用特征有什么好处?

object Mixin extends App {

  class MixinTrait extends MixinAbstractClass{
    def traitPrint = println("I'm the trait")
  }

  abstract class MixinAbstractClass {
    def abstractPrint = println("I'm the abstract classs")
  }

  class MixinImplementation extends MixinTrait {}

  val obj = new MixinImplementation()
  obj.traitPrint
  obj.abstractPrint
}

1 个答案:

答案 0 :(得分:1)

假设StringIterator是独立实施的。也许,它是某个库的成员,你想通过添加一些实用方法来“丰富”它。

由于这个原因你无法使StringIterator扩展你的特性,它不能为你修改(当你不希望类直接扩展特性时的另一种常见情况,就像你的功能一样)添加仅对该类的某些应用程序有用,但不适用于其他应用程序)。

你可以反过来做,并使“富”特征扩展原始类,就像你在你的例子中所做的那样。这有效,但如果有多个呢? StringIteratorIntIteratorFileIteratorMyIteratorYourIterator ...那么你会扩展哪一个?