在下面的代码中,我可以定义id为List[I]
abstract trait Repository[I,M] {
def getOneById(id: List[I]): Option[M]
}
Run Code Online (Sandbox Code Playgroud)
但是,为什么我不能定义id为List[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)
在
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)
这应该清楚为什么这不编译.
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |