作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
Explicit return from play action
(2 个回答)
5年前关闭。
我现在正在学习 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
关键字无法避免,但看起来您目前没有这个问题。
场景一 :单一条件场景,您当前的场景。在这种情况下,您可以避免使用 return
用一个非常简单的 if else
.
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) }
}
return
用法在 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;
}
return
是可以避免的,通过使用不同的构造,并且总是有一个递归版本可以用来替换一个明显不可能的东西
return
内丹迭代。
关于scala - 如何在 Scala 中提前返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38833876/
我是一名优秀的程序员,十分优秀!