【发布时间】:2021-05-24 21:43:51
【问题描述】:
为什么 Scala 中的 f 有界多态性通常使用上限类型 以及 类似的 self 类型实现
trait MyTrait[A <: MyTrait[A]] { self: A =>
…
}
而不仅仅是只是一个像
这样的自我类型trait MyTrait[A] { self: A =>
…
}
第一个示例中的类型上限似乎是不必要的。至少我找不到使用一个的任何好处。我在这里忽略了什么吗?然而,类型边界确实妨碍了像
这样的用法def func[A](implicit ev: A <:< MyTrait[A]) = ???
(当然,在这个简单而人为的示例中,func[A <: MyTrait[A]] 可以解决问题,但在更复杂的设置中可能无法解决)
我发现 f-bounded polymorphism with 在多个库中实现了一个类型,甚至在一篇关于该主题的介绍性博客文章 (https://tpolecat.github.io/2015/04/29/f-bounds.html) 中也发现了,我想知道是否最好省略一般类型绑定。
【问题讨论】:
标签: scala f-bounded-polymorphism