Say mam to:Ograniczenie klasę z niejawnego dowodów
trait Animal {
type Species
}
mogę dość łatwo napisać funkcję, która trwa tylko dwa zwierzęta tego samego gatunku
def breed(a: Animal, b: Animal)(implicit evidence: a.Species =:= b.Species) = ???
ale chcę utworzyć klasa z tym samym rodzajem ograniczenia:
class Bed(a: Animal, b: Animal)(implicit evidence: a.Species =:= b.Species)
, ale nie zostanie skompilowany. Próbowałem kilka kombinacji próbują wykorzystać cechy z trwałych identyfikatorów i ograniczeń, a co nie, ale bez względu na to, co robię - Wydaje mi się zawsze skończyć z problemami
trait Bed {
type T
def a: Animal { type Species = T }
def b: Animal { type Species = T }
}
object Bed {
def apply(a1: Animal, b1: Animal)(implicit ev: a1.Species =:= b1.Species) = new Bed {
type T = b1.Species
def a = a1 // this line won't compile, as the compiler can't see the two species are equal ?
def b = b1
}
}
Dzięki.