您正在使用
+
不正确。它仅用于的类型参数
类别
表示类的参数应该是协变的。
将其与方法一起使用没有多大意义(
Seq[T]
事实上
是
的子类
Seq[Record]
-因为
Seq
是协变的,但这对你没有帮助,因为
功能
是
逆变的
在他们的参数类型中
Function[Seq[T], T]
是一个
超类
属于
Function[Seq[Record], T]
,而不是子类)。原因如下:
之后
.groupBy(_.k)
你有
Map[String, Seq[Record]]
.
现在,你正在做
.mapValues(func)
并试图向其传递一个函数
序号【T】
. 这是行不通的。
想象一下
Record
是
Animal
和
T
是
Dog
... 和
func
是
makeBark
... 现在你想把一群动物传给它,其中一些是
Cat
s、 一些
Bird
s、 也许还有一些
Fish
. 你不能让他们都叫,对吗?
您可以声明reducer函数来接受
记录
顺序而不是
T
:
def iter_2_map[T <: Record](func: Seq[Record] => T)(iter: Iterator[String])
这将被编译,但它似乎对您没有多大用处,因为您似乎
预料
你的
func公司
能够返回
二者都
EmptyRecord
和
ValidRecord
,而不仅仅是
T
(因为您正在过滤之后的清空)。因此,实际上似乎您根本不需要type参数:
def iter_2_map(func: Seq[Record] => Record)(iter: Iterator[String])