我想了解这两个代码之间的区别。
让我们看一下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
}
这两个代码有什么区别? 谢谢
答案 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
的所有方法