为什么groovy中的方法解析顺序是非标准的?
使用traits,您可以在groovy中建模多重继承。考虑下面的代码,其中使用A、B、C和X建模简单的菱形。此外,F F作为端点。< /P>为什么groovy中的方法解析顺序是非标准的?,groovy,Groovy,使用traits,您可以在groovy中建模多重继承。考虑下面的代码,其中使用A、B、C和X建模简单的菱形。此外,F F作为端点。< /P> trait A { def f() { println("A") super.f() } } trait B extends A { def f() { println("B") super.f() } } trait C extends A { d
trait A {
def f() {
println("A")
super.f()
}
}
trait B extends A {
def f() {
println("B")
super.f()
}
}
trait C extends A {
def f() {
println("C")
super.f()
}
}
trait F {
def f() { println("F") }
}
class X implements F,B,C { }
def x = new X()
x.f()
该程序的输出为:
C
A
B
F
请注意,A.f
在B.f
之前被调用,尽管A
是B
的超类。因此,在子类方法之前调用一个超类方法。这似乎完全错了
在Python、Scala和commonlisp中,类似代码的输出将是cbaaf
,这就是众所周知的
选择这种方法解析顺序背后的目的是什么,还是仅仅是groovy(2.4.6)中的一个bug?这是定义的顺序
这里面还有一点
这不是虫子