2012-04-03 8 views
6

Soy nuevo en Scala, y tratando de comprender los siguientes códigos (derivado de un ejemplo en el principio del libro Scala)¿Cómo puede (1 +) ser alguna vez una función?

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

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

No entiendo como "1 +" en el punto (B) es considerado como una función (tomar 1 parámetro Int, y devolver un Int) que satisfaga la definición w42 en el punto (A)?

¿Le importaría explicar por favor o me punto a algunos documentos que tienen la respuesta?

Respuesta

11

Simple. En Scala 1 + 2 es solo una sintaxis de azúcar superior a 1.+(2). Esto significa Int tiene un método denominado + que acepte Int:

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

Es por esto que se puede utilizar 1 + como si fuera una función. Ejemplo con denominación método menos inesperado:

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

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

BTW Técnicamente hablando, eta-expansión también está involucrado para convertir método para una función.

+4

Tal vez algún indicio útil: '1 +' significa '1 + _' significa' x => 1 + x' – sschaef

+0

Gracias Tomasz por ejemplo adicional. – lastrinh1296773

+0

Gracias Antoras por la sugerencia útil – lastrinh1296773

Cuestiones relacionadas