我想将一小段代码从 Ruby 移植到 Groovy,但我坚持这样做:
def given(array,closure) {
closure.delegate = array
closure()
}
given([1,2,3,4]) {
findAll { it > 4}
}
现在它因以下消息而死:
Exception thrown: Cannot compare ConsoleScript0$_run_closure1 with value 'ConsoleScript0$_run_closure1@1e6743e' and java.lang.Integer with value '4'
.
我试图将闭包的委托设置为数组,但似乎在findAll
方法中,它代表一个闭包,而不是数组中的实际项目。我也尝试像这样运行关闭:
array.with {
closure(array)
}
但我仍然无法让它工作。关于什么可以起作用的任何想法?Ruby 的等价物是instance_eval
数组上下文中的闭包。
编辑:运行 Mykola 的代码产生了这个输出:
given [1, 2, 3, 4]
class Demo$_main_closure1
2
Exception thrown: Cannot compare Demo$_main_closure1 with value 'Demo$_main_closure1@fe53cf' and java.lang.Integer with value '2'
groovy.lang.GroovyRuntimeException: Cannot compare Demo$_main_closure1 with value 'Demo$_main_closure1@fe53cf' and java.lang.Integer with value '2'
at Demo$_main_closure1_closure2.doCall(ConsoleScript3:15)
at Demo$_main_closure1.doCall(ConsoleScript3:15)
at Demo$_main_closure1.doCall(ConsoleScript3)
at Demo.given(ConsoleScript3:28)
at Demo$given.callStatic(Unknown Source)
at Demo.main(ConsoleScript3:12)
我正在运行 Groovy 1.6.5。