我试图更好地理解以下行为:
scala> class C[-A, +B <: A]
<console>:7: error: contravariant type A occurs in covariant position
in type >: Nothing <: A of type B
class C[-A, +B <: A]
^
但是,以下工作:
scala> class C[-A, +B <% A]
defined class C
我可以看到有界变量的方差和有界变量相反可能存在问题,尽管我不清楚具体问题是什么。我什至不太清楚为什么更改绑定到视图绑定的类型会使事情变得正常。在没有适用的隐式转换的情况下,我希望这两个定义具有大致相同的效果。如果有的话,我希望一个观点一定会提供更多的恶作剧机会。
对于一些背景知识,我定义了在某些方面类似于函数的类,我想做一些类似的事情
CompositeFunc[-A, +B <: C, -C, +D] (f1 : BaseFunc[A, B], f2 : BaseFunc[C, D])
extends BaseFunc[A, D]
可以说
CompositeFunc[-A, +B <% C, -C, +D] (f1 : BaseFunc[A, B], f2 : BaseFunc[C, D])
extends BaseFunc[A, D]
实际上更可取,但我仍然想更好地了解这里发生了什么。