2012-09-28 24 views
9

Lo que se entiende por debajo declaración Scala:Lo que se entiende por 'MyType = Int => Boole'

type MyType = Int => Boolean 

Aquí es mi entendimiento:

Estoy declarando un nuevo tipo 'MyType', pero lo que se quiere decir con la más alta función de orden 'Int => Boole'

+1

Tenga en cuenta que 'Int => boolean' _no_ es una función de orden superior (ni siquiera si el fragmento se deriva de [Coursera de] (http://www.coursera.org/course/progfun) "Semana 2: Funciones de orden superior" asignación ;-)) – netzwerg

+0

@netzwerg Sí, parece que estoy encontrando incluso las cosas 'simples' difíciles. – user701254

+1

No se preocupe, esta es realmente simple: las funciones de orden superior son funciones que toman otra función como parámetro de entrada o devuelven/emiten otra función ([Wikipedia] (http://en.wikipedia.org/wiki/Higher) -order_function)) – netzwerg

Respuesta

14

no es declarar tanto un nuevo tipo como declarar un nuevo tipo de alias . Siguen siendo del mismo tipo: pero el alias le permite escribirlo de manera más sucinta.

Int => Boolean es el tipo de una función que toma un argumento, un Int, y devuelve un booleano.

Por ejemplo, una función como "mayor que 5" podría tener el tipo Int => Boolean:

type MyType = Int => Boolean 
val greaterThan5: MyType = (x: Int) => x > 5 
greaterThan5(7) // true 
3

Tiene usted razón, las siguientes compilaciones:

type MyType = Int => Boolean 
def positive(x: Int) = x > 0 
val fun: MyType = positive 
fun(42) //yields true 

Aquí declaran tipo de alias diciendo que MyType equivalente a una función tomando Int y devolviendo Boolean. Luego, crea un método que coincida con dicha declaración. Finalmente asigna este método a una variable del tipo MyType. Se compila y funciona bien.

Tenga en cuenta que esto es sólo un alias, no un tipo nuevo:

trait MyType2 extends (Int => Boolean) 
val fun2: MyType2 = positive _ 
error: type mismatch; 
found : Int => Boolean 
required: MyType2 
     val fun2: MyType2 = positive _ 
         ^
Cuestiones relacionadas