2011-03-11 10 views
7

A través de las búsquedas, entiendo la forma (o, de forma) para convertir una matriz a una lista es así:dónde viene matriz de obtener su método toList

val l = Array(1, 2, 3).toList 

Pero no sólo no puedo encontrar la toList método en los documentos API de Array, no puedo encontrarlo en algo que parece ser un antecesor o rasgo heredado de Array.

El uso de los nuevos documentos 2.9 API, veo que toList existe en estas cosas:

ImmutableMapAdaptor ImmutableSetAdaptor IntMap List ListBuffer LongMap 
MutableList Option ParIterableLike PriorityQueue Stack StackProxy 
StreamIterator SynchronizedSet SynchronizedStack TraversableForwarder 
TraversableOnce TraversableOnceMethods TraversableProxyLike 

pero no puedo entender cómo toList recibe de uno de estos para ser parte de la matriz. ¿Alguien puede explicar esto?

+0

Si es algo así como Java, es un método de clase de la clase Array. –

+0

Eso es lo que pasa, sin verlo: http://www.scala-lang.org/api/current/scala/Array.html – dino

+0

Sí, me di cuenta también ... ¿quizás pobres documentos? –

Respuesta

13

toList métodos y otros similares que no se encuentran de forma nativa en los arrays de Java (incluyendo nuestros viejos favoritos, mapa, flatMap, filtra etc.) provienen de s.c.m.ArrayOps, que adquieren a través de matrices de conversiones implícitas en scala.Predef. Busque métodos implícitos cuyos nombres terminen en ArrayOps y verá de dónde viene la magia.

+0

Huh. Y ese ArrayOps aún no aparece como que contiene toList en ese índice para los métodos que comienzan con T: http://www.scala-lang.org/archives/downloads/distrib/files/nightly/docs/library/index/index -t.html – dino

+1

Intenta compilar con 'scalac -print' para * realmente * ver la magia. – pedrofurla

+2

@dino Porque el índice de referencia no muestra miembros heredados. toList se define en TransversableOnce. – pedrofurla

Cuestiones relacionadas