在 Scala 中使用 Mixin 有什么好处?

What are the benefits of Mixin in Scala?

我正在阅读 Scala Blog for Mixin,但我没有看到他们在 post 上使用的代码的优势。首先,他们只在 main 方法中使用 traits 方法,所以我不明白为什么他们不能扩展 trait:

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

我已经用下面的代码试过了,只要扩展特征就可以让我访问特征的和抽象的 class' 方法。所以我的问题是:使用特征有什么好处?

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
}

假设StringIterator是独立实现的。也许,它是某个库的成员,你想通过添加一些实用方法来 "enrich" 它。

你不能让 StringIterator 出于这个原因扩展你的特征,它对你来说是不可修改的(另一种常见情况是你不希望 class 像那样直接扩展特征是指您添加的功能仅对 class 的某些应用程序有用,而对其他应用程序没有用)。

您可以反过来做,并使 "rich" 特征扩展原始 class,就像您在示例中所做的那样。这行得通,但如果有多个呢? StringIteratorIntIteratorFileIteratorMyIteratorYourIterator ...那你会扩展哪一个?