はい!この質問のもう一つは、はい、私はすでにstackoverflowでこの質問の多くを読んで、まだこの概念とそのアプリケーションを理解していない。スカラ協同とコントラスト変動
私はScalaの新しい人です。多くの人のように、私はまだContravarianceという概念を得ていませんでした。私はProgramming Scala第2版を読んでいます。そして、283ページで、次の例でcontravariance:Javaで考える
var f: C => C = (c: C) => new C
f = (c: CSuper) => new CSub
f = (c: CSuper) => new C
f = (c: C) => new CSub
f = (c: CSub) => new CSuper // COMPILATION ERROR!
:
class CSuper { def msuper() = println("CSuper") }
class C extends CSuper { def m() = println("C") }
class CSub extends C { def msub() = println("CSub") }
その後、機能や使用のいくつかの例があります:
は、階層構造を与えますCSuperはCSubのスーパータイプなので、最後の式はコンパイルされません。
私は理解できないことは、この場合、関数1 [-C、+ C]の型が最初のパラメータで反変であることを意味しますか?
本はcontravarianceためwhere X[String] is a supertype of X[Any], for some type X.
コ/ contravarianceは、パラメータ化された型のサブクラスでちょうどappliableあるときに我々は機能1を使用しているので、私が意味する、分散はちょうど、機能1のサブタイプに適用されていることを述べていますそれだろうか?
実際にどのように機能し、いつ使用する必要がありますか?
"私はすでにstackoverflowでこの質問をたくさん読んでいますが、まだ理解していません..." - あなたが書くことができることについてのあなたの質問には本当に有用な示唆はありません。あなたがすでに読んだもの。あなたはここでいくつかの質問をしましたが、それらのすべてが非常に幅広く、それらのすべてが重複しています。 –
@SethTisue、ええ、私はすでに読んでいる質問は、私が探している知識を持っていると思うが、彼らが答えられる方法は私には分かりません、私は誰かが多分別の方法で説明することを望んでいた。 –
@KennedyOliveira Liskovの置換原理を探します。 – pedrofurla