MethodMosure的PropertyMissing

时间:2011-05-04 04:01:38

标签: groovy intellij-idea

当我在groovysh中尝试这段代码时:

def foo(s) {
    s.trim()
}

a = foo

一切都按预期工作,但当我在IDE(Intellij想法)中尝试时,我得到:

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

2 个答案:

答案 0 :(得分:0)

它在groovy控制台中对我不起作用,我不希望这样,因为foo是一个函数而你试图在变量{{1}中存储对它的引用}。您只能在变量中存储对闭包的引用,因此您应该将a重新定义为闭包

foo

或将其定义为函数并使用def foo = {s -> s.trim() } a = foo 运算符将其转换为闭包

.&

答案 1 :(得分:0)

在groovysh的Interpreter.groovy中有一句话:

context["${m.name}"] = new MethodClosure(type.newInstance(), m.name)

我认为它回答了我的问题。