我有以下方法,我只想在传递event.status
时测试status
属性:
def findEvent(String desc, String status = null, Collection events) {
return events.find {
it.description == desc && \\If status is not null: it.status == status
}
throw new Exception("Review Event Record Not Found: ${desc}")
}
我认为可以这样做,但它似乎不起作用:
def findEvent(String desc, String status = null, Collection events) {
return events.find {
it.description == desc && (status != null ?: {it.status == status})
}
throw new Exception("Review Event Record Not Found: ${desc}")
}
有什么办法可以做到的吗?或者我必须回到这样的事情:
if (status != null) {
return events.find {
it.description == desc && it.status == status
}
} else if (status == null) {
return events.find {
it.description == desc
}
}
是否有某种最佳做法?
答案 0 :(得分:22)
我不相信这种表达是合情合理的。
猫王的意思是“如果真的,使用价值,否则使用其他东西。”
你的“其他东西”是一个闭包,值是status != null
,这两者似乎都不是你想要的。如果status
为null,则Elvis说true
。如果不是,你会得到额外的一层封闭。
为什么你不能使用:
(it.description == desc) && ((status == null) || (it.status == status))
即使没有工作,你只需要闭包来返回适当的值,对吧?无需创建两个单独的find
调用,只需使用中间变量。