`は` copy`を定義し、私はもっとうまくできると思った、しかしが考えるtrait`
def copy(x: X, newValue: String): X = x match {
case A(_) => A(newValue)
case B(_) => B(newValue)
}
、すなわち正確に。 B
はX
のサブクラスであるため
ため、技術的に、A
が入力されたという理由だけで、B
を出力することができました。
<console>:17: error: type mismatch;
found : A
required: T
case A(_) => A(newValue)
^
<console>:18: error: type mismatch;
found : B
required: T
case B(_) => B(newValue)
^
どのように私は与えられた署名付きcopyBetter
を実装することができます:私は、コンパイル時エラーを得た、
def copyBetter[T <: X](x: T, newValue: String): T = x match {
case A(_) => A(newValue)
case B(_) => B(newValue)
}
しかし:
は、だから私は試しましたか?
私は同様の問題があったと思いますが、Xを返すように解決しました。ここで問題となるのは、戻り値の型が動的で、呼び出す前にどの型が 'T 'なのかわからないということです。一般的なメソッドへの通常の呼び出しから、その場合は返すことが分かっているので、事前に型を指定することができます。ここではできません。 –
私は、あなたの問題がそれに対応するかどうかを確かめるために、形のないものを見ていきます。 – Reactormonk