【发布时间】:2018-11-18 10:40:33
【问题描述】:
这四个版本可以编译,但我很好奇我们应该更喜欢一个选项而不是另一个选项的上下文。
// 1
def f[N, S <: Seq[N]](s: S)
// 2
def f[N, S[N] <: Seq[N]](s: S[N])
当使用 1 而不是 2 时,它们非常相似
2 强制 S 将 N 作为通用参数作为 1 但这两者之间有什么区别?
然后我们有更通用的设置。
// 3
def f[N, S[X] <: Seq[X]](s: S[N])
// 3.a
def f[N, S[X] <: Seq[X]](s: S[N]): S[Int]
据我谦虚理解3 授权提取通用容器类型以供以后重用并获得类似3.a 的内容。
但是未声明的 X 泛型参数是什么意思,我想这是一种声明特殊内容的方式,但我不明白。
// 4
def f[N, S[X] <: Seq[_]](s: S[N])
除了我知道Seq[_]代表Seq[Any]之外,我不知道该说什么4
最后,我只是想了解更多关于这些工具及其特性的信息,以便更妥善地完成工作。
【问题讨论】:
标签: scala generics higher-kinded-types