我是Grails/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)
}
讓我驚訝的是,當我追蹤到第一回。它似乎執行回報,然後我在下一個如果。爲什麼沒有回來?
[編輯]我做了更詳細的例子。好吧,在接近(以及當天早些時候)的考試時,我看到的更準確的描述就是這個。我追溯到'如果'條件。它被評估。如果條件爲false,則調試器跳過該塊但在塊內的返回語句處停止。很混亂。塊被跳過了還是不是?我會嘗試在塊內放置一些斷點。在'if'語句爲true的情況下,它會執行該塊並確實返回...但是有兩個步驟沒有顯示出來。執行點消失。這意味着我必須兩次擊中F8然後才能返回。可能會懷疑這是一些Groovy的魔法。系統正在進行一些操作。
如果條件得到滿足,它做了,無論你跟蹤它是錯誤的 –
當然可能,但似乎不太可能。如果我跟蹤的代碼與二進制不匹配,事情就會發生,就像我會看到明顯錯誤的值,或者我會看到空行上顯示的斷點或步驟。我會保持一個開放的態度,但我認爲這可能是我沒有了解Groovy和return關鍵字的東西。 – user447607
你正在使用什麼IDE?解決方案可能在不同的IDE之間有所不同。 – Rotem