如何在Scala中提前返回
发布时间:2020-12-16 18:34:36 所属栏目:安全 来源:网络整理
导读:参见英文答案 Explicit return from play action????????????????????????????????????2个 我现在正在学习Scala.我喜欢做的一件事就是早退.我相信这对每个人来说都更容易阅读,因为我们之前只是删除了无效状态.现在,由于Scala是一种函数式语言,并且我已经读过
参见英文答案 >
Explicit return from play action????????????????????????????????????2个
我现在正在学习Scala.我喜欢做的一件事就是早退.我相信这对每个人来说都更容易阅读,因为我们之前只是删除了无效状态.现在,由于Scala是一种函数式语言,并且我已经读过切割计算是不好的函数式,我想知道是否有一些技巧或函数式编程等同于早期返回. 这是我要编写的代码,完全清楚,这只是一个愚蠢的例子,我不是在寻找我的特殊案例的特殊黑客,而是更多关于如何处理这些问题的一般建议. if (request.headers.get(session_header).isEmpty) { BadRequest(session_not_set) } else { Ok(CartHelper.getCart(session,user)) } 现在,我很想做的是: if (request.headers.get(session_header).isEmpty) { BadRequest(session_not_set) return; } Ok(CartHelper.getCart(session,user)) 如果你对我有任何暗示! 解决方法
在某些情况下,无法避免使用return关键字,但看起来您当前没有遇到此问题.
场景1:单一条件场景,即您当前的场景.在这种情况下,您可以避免使用非常简单的if返回. def doSomething: AnyContent = { if (request.headers.get(session_header).isEmpty) { BadRequest(session_not_set) } else { Ok(CartHelper.getCart(session,user)) } } 如果未设置会话是一个常见问题,您可以使用部分功能简单地保护它. def requireSession(req: Request)( pf: Session => AnyContent ): AnyContent = { request.headers.get(session_header) .fold(BadRequest("Session not set"))(pf(_)) } 然后: // Assuming Play framework being used here def getCart: AnyContent = Action { implicit req => requireSession(req) { session => Ok(CartHelper.getCart(session,user) } } 场景2:使用return返回break循环,或者所谓的早期返回通常是性能改进元素. Scala中返回的一个显然有效的用法似乎是不可避免的,在这种情况下,你会为??第一个东西迭代一个集合.显然,你可以使用在标准库中预构建的collection.find和其他辅助方法为你抽象,但是为了参数. def inList[T](l: List[T],value: T): Boolean = { for (el <- l) { // break the loop for the first match found // for the sake of efficiency. if (el == value) return true; } false; } 即使在这样的情况下,返回也是可以避免的,通过使用不同的构造,并且总有一个递归版本的东西可以用来替换dan迭代中明显不可能的返回. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |