「外側=>」機能に関する資料はありますか?これは、推論型の自己型注釈のように見えます。しかし、私は間違っていると感じています。「外側=>」とはどういう意味ですか?
場合によっては、super
へのアクセスを表現するのと別の方法ですか?
trait A extends (B => C) {
outer =>
def apply(x: B): C = outer(x)
}
「外側=>」機能に関する資料はありますか?これは、推論型の自己型注釈のように見えます。しかし、私は間違っていると感じています。「外側=>」とはどういう意味ですか?
場合によっては、super
へのアクセスを表現するのと別の方法ですか?
trait A extends (B => C) {
outer =>
def apply(x: B): C = outer(x)
}
super
ではなく、外側スコープです。さまざまなスコープのエイリアシング方法です。例:
class A(val x:Int) { thisA =>
class B {
val x = 2
val y = x + thisA.x // without thisA how could we use A.x instead of B.x ? (*)
}
}
より良い例がhereです。
(*)同じ効果がある別の方法がありますが、それはこの質問を超えています。
this
にアクセスする別の方法です。外側のthis
が内部クラスの別のthis
によってシャドーされる場合に便利です。そうすれば、外側にthis
を追加することができます(元のthis
は名前が変更されていないので、スコープに入っても使用可能です)。
ありがとうございます。与えられた例で外側のスコープはどのように拡張されますか?外側(x)は(B => C)の適用方法ですか?あるいは、それは特性Aの適用方法である「この」範囲であろうか?それとも、もし私がAで新しいDをするのであれば、それはDの適用でしょうか? –
どちらの場合でも、あなたの例と新しいDはAを拡張し、outer()はAからouter.apply()になります。 – pedrofurla
私が好きな人にとっては、「他の方法」はA.this.xです。 – leedm777