2009-06-29 9 views
6

Kiedy zadzwonić:W jaki sposób Scala "wypełnia" brakujące argumenty w klasie spraw?

actor_ ! Exit 

Jak to jest przekształcony w budowie:

case class Exit(from: AbstractActor, reason: AnyRef) 

W szczególności, jak to jest, że gdy zgłoszę to ze zdalnego (klient), aktor, który ma ED były link do zdalnego sterowania (serwera) aktora, że ​​serwer odbiera wystąpienie Exit których właściwość from jest aktorem:

'[email protected](10.10.7.90,8366) 

Zasadniczo chciałbym dowiedzieć się, w jaki sposób mogę uzyskać uchwyt na tym obiekcie zdalnego klienta-aktora!

Odpowiedz

2

To, co wysyłasz, to obiekt singletonowy Exit. W interfejsie API Scala przewiń w dół obok klas i wyszukaj obiekty.

object Exit 
extends (AbstractActor, AnyRef) => Exit 

Teraz nie widziałem twojego kodu, więc nie wiem, jak go używasz. Zauważ jednak, że ten obiekt Exit jest (faktycznie rozszerza) funkcją, która pobiera dwa parametry i zwraca utworzoną przez nie klasę Exit case. Będzie również zawierał pewne rzeczy w instrukcji klasy case.

Albo, innymi słowy, Exit.apply (x, y) (stosowana funkcja Exit) ma taki sam wynik jak Exit (x, y) (konstruktor klasy Exit). Ale podczas gdy nie możesz zdać klasy, możesz przekazać obiekt.

+0

Ah; POMYSŁ wskazuje mi niewłaściwą klasę. Pytanie wciąż jednak pozostaje; skąd pochodzą pliki AbstractActor i msg? Jak kończy się instancja klasy Exit? –

+0

Mój kod to w zasadzie "actor_! Exit". Nie przekazuję żadnych zmiennych do niczego. A jednak aktor kończy na wysyłaniu klasy wyjścia (z msg) z pięknymi i dokładnymi wartościami. I w jaki sposób obiekt Exit rozszerza funkcję binarną, gdy nie deklaruje metody apply()? –

+0

Ah, ale Exit deklaruje metodę apply()! Jego typ to "(AbstractActor, AnyRef) => Exit", czyli to samo co "Function2 [AbstractActor, AnyRef, Exit]". Ponieważ funkcja 2 deklaruje zastosowanie, należy również wyjść. –

Powiązane problemy