Scala - 选择一个特征的方法而不是另一个
Scala - choose a method of one trait over another
我是 Scala 新手。我是学traits的,好像可以有具体的方法。这是我写的代码。
trait A{
def print : Unit = {
println("I am in A")
}
}
trait B{
def print : Unit = {
println("I am in B")
}
}
trait C {
def print : Unit = {
println("I am in C")
}
}
class D extends A with B with C{
}
object Main extends App {
val d: D = new D
d.print
}
很明显是编译错误。编译器要求我覆盖 D 中的打印方法。我不想写一个新方法。我只想选择 C 的打印方法而不是其他方法。有什么办法只能选择C的打印方式吗?我希望我已经说清楚了。如果这个问题听起来很愚蠢,我很抱歉。我在尝试学习。提前致谢。
我同意 S.K class D 中要覆盖的问题。
你用 C 扩展你的 D class 的一种方式,而不覆盖你如何在 C 中获得方法的句柄?
您必须重写才能调用它的方法。
@S.K, so the last trait I mix in is the super class?
如果您查看 Scala trait 的文档,每当 scala 编译器看到任何具有多个父级的 class 时,scala 编译器会将所有 classes 以可堆叠的形式放置。
so If A extends B with C 将变为 --> A->B->C 并且当您从基础 class A 调用 super 时它将考虑像 C->B (C then B) 这样的方法。
同样的方法,如果你使 A extends C with B 将变为 --> A->C->B 并且当你调用它时,编译器将考虑 B->C ( B 然后 C).
请在下面查看有关可堆叠的 scala 特征的更多详细信息 link。
我是 Scala 新手。我是学traits的,好像可以有具体的方法。这是我写的代码。
trait A{
def print : Unit = {
println("I am in A")
}
}
trait B{
def print : Unit = {
println("I am in B")
}
}
trait C {
def print : Unit = {
println("I am in C")
}
}
class D extends A with B with C{
}
object Main extends App {
val d: D = new D
d.print
}
很明显是编译错误。编译器要求我覆盖 D 中的打印方法。我不想写一个新方法。我只想选择 C 的打印方法而不是其他方法。有什么办法只能选择C的打印方式吗?我希望我已经说清楚了。如果这个问题听起来很愚蠢,我很抱歉。我在尝试学习。提前致谢。
我同意 S.K class D 中要覆盖的问题。
你用 C 扩展你的 D class 的一种方式,而不覆盖你如何在 C 中获得方法的句柄?
您必须重写才能调用它的方法。
@S.K, so the last trait I mix in is the super class?
如果您查看 Scala trait 的文档,每当 scala 编译器看到任何具有多个父级的 class 时,scala 编译器会将所有 classes 以可堆叠的形式放置。
so If A extends B with C 将变为 --> A->B->C 并且当您从基础 class A 调用 super 时它将考虑像 C->B (C then B) 这样的方法。
同样的方法,如果你使 A extends C with B 将变为 --> A->C->B 并且当你调用它时,编译器将考虑 B->C ( B 然后 C).
请在下面查看有关可堆叠的 scala 特征的更多详细信息 link。