为什么我不能写`List [I]`但是可以写'我'

Man*_*dha 0 scala

在下面的代码中,我可以定义idList[I]

abstract trait Repository[I,M] {

    def getOneById(id: List[I]): Option[M]
}
Run Code Online (Sandbox Code Playgroud)

但是,为什么我不能定义idList[I]下面的代码?

abstract trait Repository[List[I],M] {

    def getOneById(id: List[I]): Option[M] //I get compiler error - cannot resolve I. Why?
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*nov 9

abstract trait Repository[List[I],M] {
    def getOneById(id: List[I]): Option[M]
}
Run Code Online (Sandbox Code Playgroud)

List是的名称类型参数:在没有做的类型 scala.Predef.List.并且I[List[I],M]仅意味着这种类型参数本身是一个普通类型接受单一类型的参数.此名称I仅在内部可见List[I].

所以这可以同样改写为

abstract trait Repository[F[_],M] {
    def getOneById(id: F[I]): Option[M]
}
Run Code Online (Sandbox Code Playgroud)

这应该清楚为什么这不编译.