2010-12-04 17 views
13

「外側=>」機能に関する資料はありますか?これは、推論型の自己型注釈のように見えます。しかし、私は間違っていると感じています。「外側=>」とはどういう意味ですか?

場合によっては、superへのアクセスを表現するのと別の方法ですか?

trait A extends (B => C) { 
    outer => 
    def apply(x: B): C = outer(x) 
} 

答えて

16

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です。

(*)同じ効果がある別の方法がありますが、それはこの質問を超えています。

+0

ありがとうございます。与えられた例で外側のスコープはどのように拡張されますか?外側(x)は(B => C)の適用方法ですか?あるいは、それは特性Aの適用方法である「この」範囲であろうか?それとも、もし私がAで新しいDをするのであれば、それはDの適用でしょうか? –

+0

どちらの場合でも、あなたの例と新しいDはAを拡張し、outer()はAからouter.apply()になります。 – pedrofurla

+1

私が好きな人にとっては、「他の方法」はA.this.xです。 – leedm777

5

thisにアクセスする別の方法です。外側のthisが内部クラスの別のthisによってシャドーされる場合に便利です。そうすれば、外側にthisを追加することができます(元のthisは名前が変更されていないので、スコープに入っても使用可能です)。