2015-02-14 14 views
6

Zauważyłem, że klasa List zdefiniować metodę ::, który dodaje element na początek listyscala - Jak metoda :: działa na liście?

def ::(x: A): List[A] 

Przykład:

1 :: List(2, 3) = List(2, 3).::(1) = List(1, 2, 3) 

Jednak jestem mylić w jaki sposób scala kompilator rozpoznać takie konwersja? Bo o ile jestem zaniepokojony,

1 :: List(2,3) 

powinien podnieść error: :: is not a member of Int

Czy tęsknię coś o definicji operatora Scala?

Odpowiedz

14

Methods whose names end with : are right-associative po wywołaniu z użyciem notacji operatora infiks. To znaczy.

a foo_: b 

jest taka sama jak

b.foo_:(a) 

Zasada ta występuje zwłaszcza w przypadku metod, takich jak to, które są często (w innych językach, na przykład Haskell ml) operatorów jak : lub ::.

+0

Dzięki! Teraz ma sens. Udaje mi się jednak znaleźć odpowiednią treść w dokumentach scala, ale się nie uda. –

+1

Dodałem łącze do specyfikacji językowej Scala. –

Powiązane problemy