2011-12-16 19 views
5

Powiel możliwe:
What does “outer =>” really mean?do czego służy self =>?

Kiedy patrzę się na kodzie źródłowym: Scala/src/library/scala/Option.scala

sealed abstract class Option[+A] extends Product with Serializable { 
    self => 

wędruję do czego służy. Wiem, że normalne korzystanie z zaworem jest ograniczenie klasę cecha może być mieszany w takich jak:.

scala> trait A 
defined trait A 

scala> trait NeedA {self: A =>} 
defined trait NeedA 

scala> new NeedA {} 
<console>:10: error: illegal inheritance; 
self-type java.lang.Object with NeedA does not conform to NeedA's selftype NeedA with A 
       new NeedA {} 
       ^

scala> new NeedA with A {} 
res39: java.lang.Object with NeedA with A = [email protected] 

scala> 

ale „to =>” nie jest to przypadek. do czego faktycznie użyto tego "this =>"?

Odpowiedz

5

tworzy alias do tego, co może być przydatne w klasach wewnętrznych (synonim dla OuterClass.this)

class A {self => 
    ... 
    class B { 
     // self is the enclosing A, synonymous for A.this 
    } 
}