Groovy MethodClose的属性缺失
在groovysh中尝试此代码时:Groovy MethodClose的属性缺失,groovy,intellij-idea,Groovy,Intellij Idea,在groovysh中尝试此代码时: def foo(s) { s.trim() } a = foo 一切正常,但当我在IDE Intellij idea中尝试时,我得到: Caught: groovy.lang.MissingPropertyException: No such property: foo for class: Test at Test.run(Test.groovy:5) 编辑:与Eclipse相同 groovysh如何将方法转换为闭包有什么秘密吗 不幸的是,我不
def foo(s) {
s.trim()
}
a = foo
一切正常,但当我在IDE Intellij idea中尝试时,我得到:
Caught: groovy.lang.MissingPropertyException: No such property: foo for class: Test
at Test.run(Test.groovy:5)
编辑:与Eclipse相同
groovysh如何将方法转换为闭包有什么秘密吗
不幸的是,我不能使用通常的this&foo语法,因为代码是DSL的一部分,我想让它不那么冗长
Groovy 1.8在Groovy控制台中对我不起作用,我也不希望它起作用,因为foo是一个函数,您试图在变量a中存储对它的引用。您只能在变量中存储对闭包的引用,因此您应该将foo重新定义为闭包
def foo = {s ->
s.trim()
}
a = foo
def foo(s) {
s.trim()
}
a = this.&foo
或者将其定义为一个函数,并使用。&运算符将其转换为闭包
def foo = {s ->
s.trim()
}
a = foo
def foo(s) {
s.trim()
}
a = this.&foo
在groovysh的解释器.groovy中有一行: 上下文[${m.name}]=新方法closureType.newInstance,m.name 我想这回答了我的问题