仅在if语句中变量不为null时进行测试

时间:2012-06-12 01:32:00

标签: groovy if-statement

我有以下方法,我只想在传递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
    }
}

是否有某种最佳做法?

1 个答案:

答案 0 :(得分:22)

我不相信这种表达是合情合理的。

猫王的意思是“如果真的,使用价值,否则使用其他东西。”

你的“其他东西”是一个闭包,值是status != null,这两者似乎都不是你想要的。如果status 为null,则Elvis说true。如果不是,你会得到额外的一层封闭。

为什么你不能使用:

(it.description == desc) && ((status == null) || (it.status == status))

即使没有工作,你只需要闭包来返回适当的值,对吧?无需创建两个单独的find调用,只需使用中间变量。