我想根据断言结果递增值:
def a = 1
def b = 1
def c = 0
def d = 0
(assert a==b, "Mismatch") ? (c++) : (d++)
有可能吗?
答案 0 :(得分:2)
您误解了一个重要部分-assert
不是函数,它不返回任何值。这是Groovy的(和Java)关键字(语句),如果右侧的表达式的计算结果为false
,则会引发异常,但不会返回任何结果。但是,您可以按照设计使用ternary operator的方式来获得预期的结果:
def a = 1
def b = 1
def c = 0
def d = 0
a == b ? (c++) : (d++)
println "c = ${c}, d = ${d}"
输出:
c = 1, d = 0
您可以在Groovy的官方"Testing Guide, chapter 2.1 Power Assertions"中阅读有关使用断言的更多信息。
答案 1 :(得分:2)
如果您真的想“忽略” assert
并继续,则可以捕获它引发的异常。例如
def a = 1
def b = 1
def c = 0
def d = 0
try {
assert a==b, 'Mismatch'
c++
}
catch (AssertionError e) {
d++
}
println([a,b,c,d])
如果某些外国代码要求我这样做,我只会使用这样的策略。这是非常复杂的代码,除非您想滥用断言功能为您生成一个不错的“警告”日志消息。