我目前正在尝试解决一些 Scala 问题集以了解该语言。我遇到了问题 11,我的解决方案无法编译。我的问题是:为什么这在 Scala 中是非法的?
def countPackSingle[A](list: List[A]): List[Any] = {
pack(list) map {ls => {
case head :: Nil => head
case head :: tail => List(tail.size + 1, head)
}}
}
IntelliJ 对此定义很满意,但编译器抱怨:
扩展函数缺少参数类型
匿名函数的参数类型必须是完全已知的。(SLS 8.5)预期类型是:?
pack(list) map {ls => { ^
我真的不明白这条消息试图告诉我什么。scala 编译器不能推断出的类型ls
吗?当我通过 指定类型时ls: List[A]
,问题仍然存在。
ls
在这种情况下:为什么我可以在使用花括号时指定参数的类型,而{ }
在使用括号时却不能( )
?直到今天,我一直在寻找一个很好的资源来解释 Scala 的不同之处。到目前为止,我相信只有在使用字面量通过 `case和其他一些极少数情况下创建偏函数时才会产生真正的不同。
感谢帮助!