5

重複の可能性:
「outer =>」は実際にはどういう意味ですか?

情報を見つけることができる場所

trait After extends Context { outer => xxx
//...
}

アウターとはどういう意味ですか=>

4

1 に答える 1

15

こちらはセルフタイプ。型注釈を追加して、クラスを強制し、特性を特定の型に拡張することもできます。しかし、型がなければ、それは単なる参照でthisあり (自己参照と呼ばれます)、内部クラスなどで使用できます。例:

class MyOuter { outer =>
  // this == outer
  class MyInner {
    // this != outer
    def creator = outer
  }
}

私が言及した他の使用法は、たとえば、既存のクラスに特別な動作を追加するために使用できます。

class MyClass {
  val foo = "foo"
}

trait MyClassExtension { this: MyClass =>
  def fooExtended(s: String) = foo + s
}

scala> val x = new MyClass with MyClassExtension
x: MyClass with MyClassExtension = $anon$1@5243618

scala> x.fooExtended("bar")
res3: java.lang.String = foobar

ここでのthis: MyClass =>手段は、MyClassExtensionのインスタンスまたはサブクラスにのみ混合できますMyClass

scala> class OtherClass
defined class OtherClass

scala> val x = new OtherClass with MyClassExtension
<console>:11: error: illegal inheritance;
 self-type OtherClass with MyClassExtension does not conform to MyClassExtension's selftype MyClassExtension with MyClass
       val x = new OtherClass with MyClassExtension
于 2012-07-26T09:50:27.257 に答える