Poszukuję sposobu zdefiniowania metody zwracającej typ T, gdzie T = typ podklasy.Scala typ abstrakcyjny reprezentujący typ podklasy
Wiem, że mógłbym to zrobić za pomocą typów abstrakcyjnych, ale nie podoba mi się konieczność redefiniowania T dla każdej podklasy.
Niektóre przykładowy kod:
object Helper {
def help[A <: MyClass](cls: A): Option[A] = { cls.foo() map { _.asInstanceOf[A] } }
}
class MyClass {
type T <: MyClass
def foo(): Option[T] = Some(this.asInstanceOf[T])
}
class ChildClass extends MyClass {
type T = ChildClass
}
Prawdopodobnie nowa funkcja język dokonał tego łatwiej? A może w jakiś sposób mogę użyć this.type? To dla mnie ważne, że mogę zdefiniować klasę pomocników, która może w ten sposób wywoływać foo.
jakaś szansa możesz wskazać mi jakąś specyficzną składnię, która działałaby, biorąc pod uwagę, że muszę napisać Helper.help dokładnie tak, jak jest (z parametrem typu)? this.type nie pasuje do A? Zwróć też uwagę, że muszę zwrócić Option [this.type] i def foo: Option [this.type] = Niektóre (to) nie wydają się kompilować. Dzięki za pomoc! –
@Pandora Singleton typy nigdy nie są wnioskowane, musisz określić to jawnie: 'Some [this.type] (this)'. –
Dziękuję bardzo! Natknąłem się na inną usterkę, ponieważ moja funkcja foo faktycznie wywołuje metodę statyczną innego obiektu -> kontynuuj pytanie tutaj, jeśli masz spostrzeżenia :) http://stackoverflow.com/questions/6886182/scala-this- zgodność typu z typem - granice supertekstu –