2013-09-30 10 views
5

Zgodnie Scala książce "Programowanie w Scala" -W Scala, czy operator przypisania "=" wywołanie metody?

Scala is an object-oriented language in pure form: every value is an object and every operation is a method call. For example, when you say 1 + 2 in Scala, you are actually invoking a method named + defined in class Int.

W tym sensie, co o pracy za pomocą przypisania "=" operatora? Czy to też jest metoda? Wydaje się nieprawdopodobne, ponieważ wtedy musi być obecny we wszystkich klasach lub jakiejś wspólnej superklasie (powiedzmy java.lang.Object?), Z której wszystkie klasy muszą ją odziedziczyć. Czy też nie wszystkie operacje są tak naprawdę wywołaniami metod w Scali?

Odpowiedz

11

Nie. Operator przypisania (=) jest słowem zastrzeżonym. Również poniżej:

_: = => < - <: <%>: # @

Dla bardziej kompleksowej listy odnoszą § 1.1. Więcej informacji na temat = opisano w § 6.12.4.

Więc tak nie jest to wywołanie metody.

+0

To jest trochę zaskakujące, aby znaleźć operatora modulo (%) na tej liście. Moim zdaniem jest on podobny do innych podstawowych operatorów arytmetycznych, takich jak +, - itp., A także może być w tym sensie również metodą. –

+3

@Sumit to nie '%', ale '<%' cukier syntaktyczny dla niejawnego widoku w parametrach typu – 4lex1v

+0

Oczywiście, dziękuję za wskazanie tego Alexlv. –

13

Mały dodatek do Jatin odpowiedź. Jest jeden przypadek, gdy = można uznać za wywołanie metody, ale w rzeczywistości jest to po prostu cukier syntaktyczny. W ramach OO Scala, gdzie brzydkie var s życia, można napisać następujące:

class Test { 
    private var x0: Int = 0 
    def x = x0 
    def x_=(a: Int) = x0 = a 
} 

Następnie można przypisać nowe ints do x:

scala> val t = new Test 
t: Test = [email protected] 

scala> t.x = 1 
t.x: Int = 1 

Ostatnia linia zostanie odcukrzona do t.x_=(1). Myślę, że w tym przypadku, biorąc pod uwagę cukier syntaktyczny, można powiedzieć, że = jest wywołaniem metody.

+0

Co rozumiesz przez ** cukier syntetyczny **? Czy to znaczy, że scala kompilator robi magiczną rzecz? – null

+0

Tak! To jest kompilator. @suud – Jatin

2

Podczas gdy inne odpowiedzi są prawidłowe dla standardowej Scala, istnieje wariant zwany Scala-Virtualized gdzie = kontrolne i inne konstrukcje wywołania metod.

+0

Naprawdę chciałbym, aby ten projekt został połączony z Mainline Scala. Z czystej perspektywy OO, sensowne jest móc implementować zachowanie 'var' i' = ', bardziej np.' If', 'while' itp. –

Powiązane problemy