假设我有一张空地图
val map = Map [Int,Int]()
val map = Map [Int,Int]()
我很困惑,因为以下代码编译正确:
map.foldLeft((0,0)){case((k1,v1),(k2,v2)) => (-1,-1)}
map reduceLeft {case((k1,-1)}
错误是:
scala> map reduceLeft {case((k1,v2)) => (k1,v1)} <console>:9: error: missing parameter type for expanded function The argument types of an anonymous function must be fully kNown. (SLS 8.5) Expected type was: (?,(Int,Int)) => ? map reduceLeft {case((k1,v1)}
这不是一个大问题,但显然不必处理这个问题会很好.你对我能做些什么不同有什么想法,或者我只是必须学会接受它?
解决方法
发生这种情况的原因是foldLeft有两个参数列表(第一个是初始值,“priming”值,第二个是函数)而reduceLeft只有一个(函数).
Scala的类型推断一次运行一个参数列表.另外,在一个参数列表中推断的类型可用于在后面的那些(那些更右边)中引导或约束类型推断,其方式是它们无法帮助引导或约束给定参数列表内的类型推断.在这种情况下,Scala无法正确推断reduceLeft签名中的B类型:
def reduceLeft[B >: (A,B)](op: (B,(A,B)) ⇒ B): B
在折叠的情况下:
def foldLeft[B](z: B)(op: (B,B)) ⇒ B): B
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。