Groovy: Могу ли я использовать assert в сочетании с оператором elvis? - PullRequest
0 голосов
/ 18 декабря 2018

Я хотел бы увеличить значения на основе результатов подтверждения:

def a = 1 
def b = 1
def c = 0
def d = 0

(assert a==b, "Mismatch") ? (c++) : (d++)

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Если вы действительно хотите «проигнорировать» 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])

Я бы использовал такую ​​тактику только в том случае, если какой-то иностранный код предписывает это мне.Это очень запутанный код, если только вы не хотите злоупотреблять power-assert, чтобы сгенерировать приятное «предупреждающее» сообщение для вас.

0 голосов
/ 18 декабря 2018

Вы неправильно поняли одну важную часть - assert не является функцией и не возвращает никакого значения.Это ключевое слово (оператор) Groovy (и Java), которое выдает исключение, если выражение с правой стороны оценивается как false, но не возвращает никакого результата.Тем не менее, вы можете достичь ожидаемого результата, используя троичный оператор так, как он был предназначен для использования:

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, глава 2.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...