17

我有以下方法,我只想在传入的情况下测试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
    }
}

有某种最佳实践吗?

4

1 回答 1

22

我不相信这个表达是有道理的。

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

你的“其他东西”是一个闭包,价值是status != null,这两者似乎都不是你想要的。如果status 空,猫王说true。如果不是,您将获得额外的封闭层。

为什么你不能只使用:

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

即使这不起作用,您所需要的只是闭包以返回适当的值,对吗?无需创建两个单独find的调用,只需使用中间变量即可。

于 2012-06-12T01:50:48.357 回答