You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala匿名函数使用return出现类型不匹配错误的原因及解决办法

报错原因

  • Scala 中return关键字的作用域是最近的外层用def定义的方法,你在匿名函数(pos: Pos) => ...内写的return,并不会作为匿名函数的返回值,而是直接让外层的terrainFunction方法提前返回Boolean类型的值,自然就和方法声明的返回值类型Pos => Boolean不匹配。
  • 另外你写的catch块语法也不符合Scala规范,Scala的catch需要接模式匹配来捕获指定异常。

修复方案

直接去掉匿名函数内的return,补全正确的异常捕获逻辑即可,Scala 会自动把代码块最后一行的表达式结果作为匿名函数的返回值:

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

  (pos: Pos) =>
    try {
      terrFunc(pos)
    } catch {
      case _: Exception => false // 捕获所有异常时返回false
    }
}

如果想要更好的性能,也可以提前判断下标合法性,避免触发异常,写法更推荐:

def terrainFunction(levelVector: Vector[Vector[Char]]): Pos => Boolean = {
  (pos: Pos) =>
    pos.row >= 0 && pos.row < levelVector.length &&
    pos.col >= 0 && pos.col < levelVector(pos.row).length &&
    levelVector(pos.row)(pos.col) != '-'
}

内容的提问来源于stack exchange,提问作者Phelizer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:06:01