gradle / groovy:从自定义类调用“全局”函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gradle / groovy:从自定义类调用“全局”函数相关的知识,希望对你有一定的参考价值。
我是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
?
谢谢。
答案
你不能直接,因为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
对象,但它是相同的模式。
欲了解更多信息:
- Groovy scope - how to access script variable in a method
- https://stackoverflow.com/a/35418596/862594
以上是关于gradle / groovy:从自定义类调用“全局”函数的主要内容,如果未能解决你的问题,请参考以下文章