为什么Scala对返回数据类型感到困惑?

我有以下 Scala 代码:

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

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

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

回答

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

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

的最小上界的UnitList[Char]Any,因此这是的结果类型if

如果您希望结果类型为List[Char],则必须添加一个else子句来捕获之前的if/ else ifs未处理的情况,从而导致List[Char].


以上是为什么Scala对返回数据类型感到困惑?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>