【发布时间】:2015-02-13 09:31:16
【问题描述】:
在尝试用 groovy 中的闭包重新发明 if/else 语法时,我无法让它发挥作用。我认为在括号外放置多个闭包是不允许的,但它可能是别的东西。
如果不允许,您将如何重现 if/else 语法?这是一个思想实验,所以不要告诉我这个实现的效率低下。
我的代码:
void ifx(boolean condition, Closure action){
["${true.toString()}": action].get(condition.toString(), {})()
}
void ifx(boolean condition, Closure action, Closure elsex){
["${true.toString()}": action, "${false.toString()}": elsex].get(condition.toString())()
}
void elsex(Closure action){
action()
}
ifx(1==2){
println("1")
} ifx(1==3){
println("2")
} elsex{
println("3")
}
错误信息:
java.lang.NullPointerException:无法在 null 上调用方法 ifx() 对象
【问题讨论】:
标签: groovy closures first-order-logic