当我在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
答案 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)
我认为它回答了我的问题。