Groovy MethodClose的属性缺失

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如何将方法转换为闭包有什么秘密吗 不幸的是,我不

在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

我想这回答了我的问题