为什么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
的最小上界的Unit和List[Char]是Any,因此这是的结果类型if。
如果您希望结果类型为List[Char],则必须添加一个else子句来捕获之前的if/ else ifs未处理的情况,从而导致List[Char].