gradle / groovy:从自定义类调用“全局”函数

问题描述 投票:0回答:1

我是groovy / gradle的新手据我所知,gradle / 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

我怎样才能使这个类MyClass'看'函数myFun

谢谢。

java class gradle groovy
1个回答
2
投票

你不能直接,因为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对象,但它是相同的模式。

欲了解更多信息:

© www.soinside.com 2019 - 2024. All rights reserved.