代码之家  ›  专栏  ›  技术社区  ›  Pierre

Gradle/groovy:从自定义类调用“global”函数

  •  0
  • Pierre  · 技术社区  · 7 年前

    我对groovy/gradle不熟悉 据我所知,Gealth/Groovy与Java兼容。

    我在“build.gradle”文件中编写了以下Gradle(没有任何任务):

    def myFun = {->"Hello World"}
    
    class MyClass {
        String getLabel() {
            return ""+ myFun();
            }
        }
    
    System.err.println(new MyClass().getLabel());
    

    在哪里上课 MyClass 调用“全局”(?)功能 myFun .

    打电话 gradle --tasks 产生以下错误:

    FAILURE: Build failed with an exception.
    
    * Where:
    Build file 'build.gradle' line: 6
    
    * What went wrong:
    A problem occurred evaluating root project 'tmp'.
    > No signature of method: MyClass.myFun() is applicable for argument types: () values: []
      Possible solutions: find(), find(groovy.lang.Closure), wait(), any(), every(), dump()
    
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
    
    BUILD FAILED
    
    Total time: 2.671 secs
    

    我怎么上这个课 类名 “查看”功能 MyFun ?

    谢谢您。

    1 回复  |  直到 7 年前
        1
  •  2
  •   nickb    7 年前

    不能直接使用,因为groovy中没有全局变量。可以修改声明以传递当前类的实例,以便调用 myFun 关闭:

    @groovy.transform.Field 
    def myFun = {-> "Hello World"}
    
    class MyClass {
        String getLabel(script) {
            return ""+ script.myFun();
        }
    }
    
    System.err.println(new MyClass().getLabel(this))
    

    或者你可以使用 binding 对象,但它是相同的模式。

    更多信息: