2

@CompileStatic の下で別のクロージャーからクロージャーを暗黙的に呼び出すと、呼び出し元はどういうわけか再帰ループに入ります。コードの問題を見つけることができますか、それとも Groovy の問題ですか?

import groovy.transform.CompileStatic

@CompileStatic
class Main {
    static main(args) {
        TestClass testclass = new TestClass()
        testclass.foo()
        //testclass.bar() // compile error for closure with @CompileStatic 
        testclass.bar.call()  // compiles and works fine
    }
}

@CompileStatic
class TestClass {
    void foo () {
        println('In foo')
        bar() // inside a method -- works fine
    }

    Closure bar = {
        println('In bar')
        //baz() // What's going on here?? It compiles, but instead
        //         of calling baz, this recurses on itself (seemingly)
        baz.call() // this works fine
    }

    Closure baz = {
        println('In baz')
    }
}

[Groovy バージョン: 2.4.5]

注: この SOの質問では同様の問題について説明していますが、それに関連する Groovy の問題は修正されていると述べています。

4

0 に答える 0