私は、次の動作の理解を取得しようとしています:Scalaの型の境界&分散
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]
のようなものをやってみたかったが、実際に好適であるが、私はまだだろうここで何が起こっているのかをよく理解してください。まず簡単なもの
興味をそそる...私は1時間を費やしたとえばタイプを探してタイプバインドで安全が壊れます。見つかったものがありません: – gzm0
また、バインドされていないサンプルがあった場合は、ビューバインドでどのように置換すれば解決するのか分かりにくいです。 –
はい、私は幾分同意します。しかし、基本的な違いは、 (少なくとも私の直感は...) – gzm0