如何在 Scala 中正确处理 returns

How to handle returns correctly in Scala

我是 Scala 的新手,我正在尝试执行以下操作:

我有这样的功能:

  def terrainFunction(levelVector: Vector[Vector[Char]]): Pos => Boolean = {
    (pos: Pos) => if (levelVector(pos.row)(pos.col) == '-') false else true
  }

但我想捕获 returned 函数中的所有错误和 return false 而不是抛出异常。

所以我尝试这样做:

  def terrainFunction(levelVector: Vector[Vector[Char]]): Pos => Boolean = {
    val terrFunc = (pos: Pos) => if (levelVector(pos.row)(pos.col) == '-') false else true

    (pos: Pos) =>
      try {
        return terrFunc(pos)
      } catch {
        return false
      }
    
  }

问题是我收到编译器错误:

Type mismatch.
Required: Pos => Boolean
Found: Boolean

为什么编译器认为我是 returning 布尔值,而不是整个函数:

    (pos: Pos) =>
      try {
        return terrFunc(pos)
      } catch {
        return false
      }

如何解决?

不要使用 tryreturn,而是使用适当的数据类型,例如 Try

import scala.util.Try

def terrainFunction(levelVector: Vector[Vector[Char]]): Pos => Boolean =
  (pos: Pos) =>
    Try(levelVector(pos.row)(pos.col) != '-').getOrElse(false)