2012-02-07 17 views

Respuesta

18

Pero pensé que la función map sólo puede tener otra función no una nueva Set.

A Setes una función. Es una función de sus elementos a booleanos: cuando le pasa un elemento, le dice si ese elemento es parte del Set.

Set(1, 2, 3).map(Set(1)) 

Repite el Set(1, 2, 3), pasando cada cada elemento a la Set(1). Es decir. primero pregunta "es 1 un miembro del conjunto {1}", que es true, luego hace la misma pregunta para 2 y 3, que es false.

Por lo tanto, el resultado es Set(true, false, false), que por supuesto es solo Set(true, false).

Del mismo modo, una secuencia es una función de enteros a elementos, un mapa es una función de claves a valores.

5
  • Set[A] extiende Function1[A, Boolean].
  • Map[K, V] extiende PartialFunction[K, V] que a su vez se extiende Function1[K, V].
  • Seq[A] se extiende PartialFunction[Int, A] que a su vez se extiende Function1[Int, A].

De modo que en la biblioteca de colecciones de Scala, los conjuntos, las secuencias y los mapas son en sí mismos funciones.

  • apply método en Set[_] prueba establecer membresía.
  • apply método en Map[_, _] devuelve el valor asociado con la clave especificada. Emite un error si la clave está ausente.
  • apply método en Seq[_] devuelve el elemento en índice dado. Lanza el error para un índice inválido.

Los dos siguientes son equivalentes:

Set(1, 2, 3).map(Set(1)) 

Set(1, 2, 3).map(x => Set(1).contains(x)) 

Así son los dos siguientes:

Seq(1, 2, 3).collect(someMap) 

Seq(1, 2, 3) collect { 
    case x if someMap contains x => someMap(x) 
} 

Y también los dos siguientes:

Seq(1, 2, 3).map(someSeq) 

Seq(1, 2, 3).map(x => someSeq(x)) 
Cuestiones relacionadas