Я бриллиант/Groovy newb, и я просматриваю какой-то уже существующий код.Как работает возврат в этом случае Grails?
Это выглядит следующим образом:
def update(Long id, Long version) {
def skateBoardSkillsInstance = SkateBoardSkills.get(id)
if (!skateBoardSkillsInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'skateBoardSkills.label', default: 'SkateBoardSkills'), id])
redirect(action: "list")
return
}
if (version != null) {
if (skateBoardSkillsInstance.version > version) {
skateBoardSkillsInstance.errors.rejectValue("version", "default.optimistic.locking.failure",
[message(code: 'skateBoardSkills.label', default: 'SkateBoardSkills')] as Object[],
"Another user has updated this SkateBoardSkills while you were editing")
render(view: "edit", model: [skateBoardSkillsInstance: skateBoardSkillsInstance])
return
}
}
skateBoardSkillsInstance.properties = params
if (!skateBoardSkillsInstance.save(flush: true)) {
render(view: "edit", model: [skateBoardSkillsInstance: skateBoardSkillsInstance])
return
}
flash.message = message(code: 'default.updated.message', args: [message(code: 'skateBoardSkills.label', default: 'SkateBoardSkills'), skateBoardSkillsInstance.id])
redirect(action: "show", id: skateBoardSkillsInstance.id)
}
Неожиданностью для меня было, когда я проследил до первого возвращения. Кажется, он выполняет возврат, а затем я буду в следующем, если. Почему он не вернулся?
[Изменить] Я привел пример более подробно.
ОК, при ближайшем рассмотрении (и ранее в тот же день) более точное описание того, что я вижу, это. Я отслеживаю условие «если». Это оценено. Если условие ложно, отладчик пропускает блок, но останавливается в операторе return внутри блока. Очень смущает. Был ли блок пропущен или не так ли? Я попытаюсь положить некоторые точки останова внутри блока. В случае, когда оператор «if» равен true, он выполняет блок и, кажется, возвращается ... однако есть два шага, которые не отображаются. Точка выполнения исчезает. Это означает, что я должен дважды нажать F8, а затем он вернется. Подозреваю, что это какая-то магия Гроувия. Что-то получает от системы.
Если условие было выполнено, оно было сделано, и все, что вы проследите, ошибочно –
Конечно, возможно, но не кажется вероятным. Если бы я отслеживал код, который не соответствовал двоичному, все могло бы произойти, как если бы я видел значения, которые явно неправильны, или я увижу точки останова или шаги, появляющиеся на пустых строках. Я буду держать это в курсе, но я думаю, что это, вероятно, то, что я не получаю от Groovy и ключевого слова return. – user447607
Какую IDE вы используете? Решение может различаться между различными IDE. – Rotem