加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 从游戏动作中明确返回

发布时间:2020-12-16 09:26:34 所属栏目:安全 来源:网络整理
导读:我有以下行动 def login: Result = Action(parse.json) { request = if (/* Let's we say here is some validation */) { return BadRequest("bad") } Ok("all ok")} 这给了我一个错误. Intellij建议使用Action [JsValue]类型.当我说return将是那种类型时,我
我有以下行动

def login: Result = Action(parse.json) { request =>
  if (/* Let's we say here is some validation */) {
    return BadRequest("bad")
  }

  Ok("all ok")
}

这给了我一个错误. Intellij建议使用Action [JsValue]类型.当我说return将是那种类型时,我在BadRequest行上再次出错,因为类型不匹配.

我试着搜索这个问题,我找到了一些建议将Action [AnyContent]设置为返回类型的答案.但我仍然得到错误.

另外我需要从if返回…之后我不想写其他如果,因为在一些更复杂的函数中,我很可能会有很少的if语句应该打破动作,如果我使用if / else方法,代码将成为噩梦.

解决方法

当然可以.在Scala中,嵌套匿名函数中的“return”语句是通过抛出和捕获NonLocalReturnException来实现的.它在 Scala Language Specification第6.20节中这样说.

这样做是因为为了理解,人们能够编写如下代码:

def loop() = {
  for (i <- 0 until 20) {
    if (someCondition) return
  }
}

该循环实际上相当于:

(0 until 20).foreach { i => if (someCondition) return }

你能看到匿名功能吗?你能看到有问题的“回归”并不是指单独从匿名函数返回吗?在我看来,这是一个设计错误.另一方面,在像Scala这样的语言中,无论如何都不需要“返回”.

所以你有一个匿名函数:

Action(parse.json) { request => ... this one here ... }

在该函数内部,您正在使用“返回”,它会触发异常.

所以Scala中的一般经验法则 – 永远不要使用返回.无论如何,这是一种面向表达的语言.你不需要它.

Action(parse.json) { request =>
  if (/* Let's we say here is some validation */) 
    BadRequest("bad")
  else
    Ok("all ok")
}

在那里,更加惯用.顺便说一句 – 你也没有“休息”或“继续”.习惯没有他们的工作.另外,关于你的意见:

Also I NEED to return from if…I don’t want to write else after that if,because in some more complex function most probably I will have few if statements which should break action,and if I use if/else approach,code will be nightmare.

这是错误的,我真的很讨厌使用依赖于返回,中断或继续的代码来精确地短路逻辑,因为复杂的逻辑变得混乱,我希望有一个清晰的视图:

>不变量,如果我们谈论循环
>退出条件
>分支/路径

使用返回,中断或继续破坏所有3点的清晰度.它们并不比GOTO跳跃好多少.如果你有复杂的功能,如果阅读它会开始成为一个问题,将它们分成多个功能.

此外,比多个“if / else”分支更好的是“匹配”语句.一旦你习惯了它们,你会爱上它们,特别是考虑到编译器甚至可以在你错过分支的某些情况下保护你.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读