2016-10-10 36 views
1

我是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的魔法。系統正在進行一些操作。

+0

如果條件得到滿足,它做了,無論你跟蹤它是錯誤的 –

+0

當然可能,但似乎不太可能。如果我跟蹤的代碼與二進制不匹配,事情就會發生,就像我會看到明顯錯誤的值,或者我會看到空行上顯示的斷點或步驟。我會保持一個開放的態度,但我認爲這可能是我沒有了解Groovy和return關鍵字的東西。 – user447607

+0

你正在使用什麼IDE?解決方案可能在不同的IDE之間有所不同。 – Rotem

回答

1

它與Groovy中的回報無關。出現這種情況的主要原因是在調試模式下運行的代碼與生成目錄中的IDE代碼更新之間存在錯誤的同步。 這看起來很奇怪,但有一些很好的技巧可以解決它(儘管它不能覆蓋你的代碼行的100%同步)。 代碼的不同運行之間的代碼更改未完全編譯到生成目錄中,生成目錄中的小更改會導致您的行爲。 解決這個問題的最簡單方法是強制執行新的代碼完整構建,並且可以通過刪除「構建」目錄並在調試模式下重新運行程序來完成。 如果這無助於在重新運行應用程序之前嘗試刷新項目依賴關係。

+0

。重新運行。同樣的問題。 – user447607

+0

你正在使用什麼IDE?什麼是Groovy版本?你在和Grails合作嗎?什麼是您正在使用的建築工具? (gradle這個/行家)? – Rotem

+0

IntelliJ IDEA 2016.2.4。正如評論中所述。 Groovy版本:2.4.7 JVM:1.8.0_101 – user447607

相關問題