首页 > 解决方案 > 为什么 Scala 对返回数据类型感到困惑?

问题描述

我有以下 Scala 代码:

def isOpen(c: Char, openC: List[Char]) = {
  if(c == '(') openC :+ '(';
  else if(c == ')') openC.reverse.tail.reverse;
}

如果条件满足,这会尝试将一个项目附加到openCList 中,如果不满足,它会尝试获取openC除最后一个添加的项目之外的所有项目。我无法理解如何解决的问题是 Scala 正在解释这个函数以返回一个Any类型,而我想要的是List[Char]. ListBuffer[Char]我也尝试用一种类型重新编写它。我试图以一种功能性的编程方式来做他,而不依赖于val声明。

之前在这个论坛上已经回答了一个类似的问题,指出这是因为 Scala 在使用 if-else 语句时会“混淆”,而 if-else 语句在执行后会有进一步的动作。但我不确定这在这里如何应用。我仍在尝试了解这是如何工作的。

标签: scala

解决方案


您的if表达式具有类型Any,因为

  • 如果 c 是(,它是List[Char]
  • 如果 c 是),它是List[Char]
  • 否则,没有适用的分支if,所以这是一个Unit

Unit和的最小上限List[Char]Any,因此这是 的结果类型if

如果您希望结果类型为List[Char],则必须添加一个子句来捕获早期/ selse未处理的情况,从而导致.ifelse ifList[Char]


推荐阅读