为什么有些语句需要在一些常规闭包结束时使用return语句?

时间:2012-07-20 00:31:24

标签: grails groovy

def handleLogin = {
   def hashPassd = DU.md5Hex(params.password)
   // Find the username
   def user = User.findByUserNameAndPassword(params.userName, hashPassd)
   if (!user) {
      flash.message = "User not found for userName: ${params.userName}"
      redirect(action:'index')
      return
   } else {
      session.user = user
      redirect(controller:'todo')
   }
}

if条件如何需要return语句?而else块不需要它?

2 个答案:

答案 0 :(得分:3)

在这种情况下,不需要返回。如果返回不存在,它将继续在if之后,这是方法的结束,从而返回。

答案 1 :(得分:1)

回归并非绝对必要,但这是一个很好的习惯。控制器操作中的renderredirect等调用通常是操作的概念“结束”,有时会容易忘记并将重定向视为{{1} }

return

这会在运行时失败,可能会有一个相当模糊的错误消息,并且为了避免这种可能性,最好记住在调用def someAction() { if(!params.id) { flash.message = "no ID provided" redirect action:'error' } def myObj = MyObj.get(params.id) //... } 或{{1}之后放置一个明确的return }}。当我回来更改我最初在6个月前写的控制器动作时,这种事情一直困扰着我......