我有以下 Scala 代码:
def isOpen(c: Char, openC: List[Char]) = {
if(c == '(') openC :+ '(';
else if(c == ')') openC.reverse.tail.reverse;
}
如果条件满足,则尝试将项目附加到 openC
列表,如果不满足,则尝试获取 openC
中除最后一个之外的所有项目一位补充道。我无法理解如何解决的问题是 Scala 正在解释此函数以返回 Any
类型,而我想要的是 List[Char]
。我也尝试用 ListBuffer[Char]
类型重写它。我试图以一种函数式编程方式来完成他的工作,而不依赖于 val
声明。
这个论坛之前已经回答过一个类似的问题,它指出这是因为 Scala 在使用 if-else 语句时会“混淆”,这些语句在执行后还有进一步的操作。但我不确定这在这里如何适用。我仍在努力了解这是如何工作的。
答案 0 :(得分:7)
您的 if
表达式的类型为 Any
因为
(
,它是一个 List[Char]
)
,它是一个 List[Char]
if
的任何分支都不适用,因此是 Unit
Unit
和 List[Char]
的最小上限是 Any
,因此这就是 if
的结果类型。
如果您希望结果类型为 List[Char]
,则必须添加一个 else
子句来捕获之前 if
/{{ 未处理的情况1}} 导致 else if
。
答案 1 :(得分:2)
您缺少 else 语句。如果您不提供 else 语句,它将假定 Any 作为返回类型
List[Char]