基本上我希望能够将实时或历史处理混合到我的算法中。以下内容无法编译。
// Event driven processing
class Event {
}
// Live events (as opposed to historical)
trait Live extends Event {
}
class Algorithm {
}
new Algorithm with Live
答案 0 :(得分:7)
通过声明trait Live extends Event
,您指定Live
只能应用于Event
的子类。稍后,您尝试将其应用于Algorithm
,而Event
不是Event
的子类,因此编译器会抱怨。
根据您的原始意图(不清楚该代码段),您可能想要:
Algorithm
声明为特质; Event
延长{{1}}。答案 1 :(得分:5)
你正在那里做多个类继承。如果特质Live
延伸Event
,则您的类型Algorithm with Live
有两个类祖先,Event
和Algorithm
。这是被禁止的。你想做的事情并不清楚,但如果有可能使Event
成为一个特质而不是一个阶级,那么它应该有效。 trait Live extends Event
暗示Live
必须与Event
或子类混合。因此,如果Algorithm
可以扩展Event
(听起来不太可能),那也可以。
答案 2 :(得分:0)
完整的例子是:
// Event driven processing. Must be a trait due to didierd's comment
// and Jean-Philippe's comment
trait Event
// Live events (as opposed to historical)
trait Live extends Event
// Self typing isn't strictly needed but generally it's not much use without it
// as I assume you're going to want to use methods of the Event within your
// Algorithm
class Algorithm { self: Event =>
}
val t = new Algorithm with Live