2012-04-03 14 views
6

Sono nuovo di Scala, e cercando di capire i seguenti codici (derivato da un esempio nel principio Scala libro)Come può (1 +) essere mai una funzione?

scala> def w42(f: Int => Int) = f(42) //(A) 
w42: (f: Int => Int)Int 

scala> w42 (1 +)  //(B) 
res120: Int = 43 

Non capisco come "1 +" al punto (B) è considerare come una funzione (prendi 1 parametro Int e restituisci un Int) che soddisfa la definizione di w42 nel punto (A)?

Ti dispiacerebbe spiegarmi o indicarmi alcuni documenti che hanno la risposta?

risposta

11

Semplice. In Scala 1 + 2 è solo uno zucchero di sintassi su 1.+(2). Questo significa Int ha un metodo denominato + che accetta Int:

final class Int extends AnyVal { 
    def +(x: Int): Int = //... 
    //... 
} 

Questo è il motivo per cui è possibile utilizzare 1 + come se fosse una funzione. Esempio con metodo meno inaspettata denominazione:

scala> def s42(f: String => String) = f("42") 
s42: (f: String => String)String 

scala> s42("abc".concat) 
res0: String = abc42 

proposito Tecnicamente, eta-espansione è anche coinvolto per convertire metodo per una funzione.

+4

Forse qualche suggerimento utile: '1 +' significa '1 + _' significa' x => 1 + x' – sschaef

+0

Grazie Tomasz per ulteriore esempio. – lastrinh1296773

+0

Grazie Antoras per l'utile suggerimento – lastrinh1296773

Problemi correlati