Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么groovy中的方法解析顺序是非标准的?_Groovy - Fatal编程技术网

为什么groovy中的方法解析顺序是非标准的?

为什么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

使用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 {
    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?

这是定义的顺序

这里面还有一点

这不是虫子