2012-09-28 8 views
9

Cosa si intende con seguito di dichiarazione Scala:Cosa si intende per 'MyType = Int => booleano'

type MyType = Int => Boolean 

Qui è la mia comprensione:

sto dichiarando un nuovo tipo di 'MyType', ma cosa si intende con la funzione di ordine superiore 'Int => booleano'

+1

Si noti che 'Int => boolean' è _not_ una funzione di ordine superiore (anche se il frammento di deriva dal [Coursera di] (http://www.coursera.org/course/progfun) "Settimana 2: funzioni di ordine superiore" assegnazione ;-)) – netzwerg

+0

@ netzwerg sì, sembra im trovando anche le cose "semplici" difficili. – user701254

+1

Non preoccuparti, questo è davvero semplice: le funzioni di ordine superiore sono funzioni che prendono un'altra funzione come parametro di input o restituiscono/emettono un'altra funzione ([Wikipedia] (http://en.wikipedia.org/wiki/Higher -order_function)) – netzwerg

risposta

14

non è tanto dichiarare un nuovo tipo di come dichiarare un nuovo tipo alias. Sono sempre dello stesso tipo: ma l'alias ti consente di scriverlo in modo un po 'più succinto.

Int => Boolean è il tipo di una funzione che accetta un argomento, un Int e restituisce un booleano.

Per esempio, una funzione come "maggiore di 5" potrebbe avere tipo Int => Boolean:

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

Lei ha ragione, le seguenti compilazioni:

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

Qui si dichiara tipo alias dicendo che MyType equivalente a una funzione che prende Int e restituisce Boolean. Quindi crei un metodo che corrisponde a tale dichiarazione. Infine, assegni questo metodo a una variabile del tipo MyType. Compila e funziona bene.

Si noti che questo è solo un alias, non un tipo nuovo:

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