Я определил два класса:Об использовании this.type в Скале
class A { def method1 = this }
class B extends A { def method2 = this }
val b = new B
Затем я проверил тип b.method1:
scala> b.method1.getClass
res29: Class[_ <: A] = class B
В этом случае я не могу использовать b.method1.method2
:
scala> b.method1.method2
<console>:11: error: value method2 is not a member of A
b.method1.method2
Так что я должен определить а и в, как это:
class A { def method1: this.type = this }
class B extends A { def method2: this.type = this }
val b = new B
Теперь я проверяю тип b.method1
:
scala> b.method1.getClass
res31: Class[_ <: B] = class B
b.method1.method2
Здесь работ:
scala> b.method1.method2
res32: b.type = [email protected]
Мой вопрос здесь что это значит, говоря Class[_ <: A] = class B
и Class[_ <: B] = class B
? И почему первое не работает, поскольку Class[_ <: A] = class B
, кажется, говорит, что это также класс B?
'.type' - это одноэлементный тип, специальная концепция в Scala. например '3.type' не' Int', это '3.type', одноэлементный тип, содержащий только номер 3. Трудно быть уверенным, но похоже, вы думаете, что' .type' означает что-то еще. –