Scala中的这两个代码段有什么区别

时间:2018-12-23 00:18:10

标签: scala traits difference

我想了解这两个代码之间的区别。

让我们看一下Scala中的以下两段代码。

  trait Expressions {
    // Bunch of functions
  }

代码1:

trait Scheduling{
      val IR : Expressions
      import IR._
      // Bunch of functions
   }

代码2:

  trait Scheduling extends Expressions { 
    // Same Bunch of functions
  }

这两个代码有什么区别? 谢谢

2 个答案:

答案 0 :(得分:3)

您的第一个代码段要求任何扩展特征的类都具有类型为IR的名为Expressions的变量。然后将导入该变量的所有成员,以便可以在“函数集”中使用它们。 Expression实例已汇总

在第二个示例中,您是继承特征。这就要求实现您特征的类也必须实现Expressions特征。

两个示例的语义相同:Expressions特征的所有成员的实现可用于“方法束”。 唯一的区别是,聚合可以更加灵活,因为您可以使用实现Expressions的任何对象。

如果您的特征实现定义了val IR = this,那么您的第二个示例可以被视为与第一个示例等效。

答案 1 :(得分:1)

以下是Scheduling的两个版本之间的一些主要区别:

从CODE1中的Scheduling继承的对象...

  • 必须提供val IR类型的Expressions
  • 具有一个额外的成员IR,该成员从对象外部可见
  • 可以将Expressions的子类与Expressions中的方法的不同实现一起使用
  • 可以以Expressions的身份访问IR.<method>的所有方法

从CODE2中的Scheduling继承的对象。

  • 具有类型Expressions
  • 可以直接访问Expressions的所有方法