Lassen Sie uns sagen, dass ich eine Eigenschaft habenMuss ich die Typabweichung in Subtypen angeben?
sealed trait Expr[-InT, +OutT] {
def apply(lhs: InT): OutT
}
Ich möchte einen Subtyp And
kontra in InT
erstellen. Muss ich es wie folgt implementieren (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))
}
Oder ist das Folgende genug (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))
}
Dank
Ich glaube nicht, dass Sie auch Varianten zu Subtypen hinzufügen müssen. Variablen geben die Korrelation zwischen Subtypen und Supertypen an. – Sakalya
dachte ich auch. Aber beide Syntaxen sind anscheinend gültig, also bin ich verwirrt. – Midiparse
Beide Syntaxen sind gültig. Wenn Sie den Subtyp als [-Int] definieren, wird er für seine Unterklassen invariant. – Sakalya