次の動作をよりよく理解しようとしています。
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
特定の問題が何であるかは明確ではありませんが、境界変数と境界変数の分散が反対であることに問題がある可能性があることがわかります。タイプ バインドをビュー バインドに変更すると問題が解決する理由については、さらに明確ではありません。適用可能な暗黙の変換がない場合、2 つの定義がほぼ同じ効果を持つことが予想されます。どちらかといえば、私はビューバウンドがより多くのいたずらの機会を提供することを期待しています.
ちょっとした背景として、ある意味で関数に似たクラスを定義しましたが、次のようなことをしたかったのです
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]
実際には望ましいですが、ここで何が起こっているのかをよりよく理解したいと思います。