4
比方說,我有一個特質我是否必須在子類型中指定類型差異?
sealed trait Expr[-InT, +OutT] {
def apply(lhs: InT): OutT
}
我想在InT
創建一個亞型And
逆變。我一定要實現它,因爲這(1):
type BExpr[-InT] = Expr[InT, Boolean]
final case class And[-InT](exp: BExpr[InT], exps: BExpr[InT]*) extends BExpr[InT] {
def apply(lhs: InT) = exps.foldLeft(exp.apply(lhs))(_ & _(lhs))
}
或者是以下就夠了(2)?
type BExpr[InT] = Expr[InT, Boolean]
final case class And[InT](exp: BExpr[InT], exps: BExpr[InT]*) extends BExpr[InT] {
def apply(lhs: InT) = exps.foldLeft(exp.apply(lhs))(_ & _(lhs))
}
感謝
我不認爲你需要添加變體以及子類型。變體指定了子類型和超類型之間的關聯。 – Sakalya
我也這麼想。但是這兩種語法都顯然是有效的,所以我很困惑。 – Midiparse
這兩種語法都是有效的。但是使子類型爲[-Int],將使其子類不變。 – Sakalya