2009-12-17 6 views

Antwort

63

Funktioniert mit jedem Tupel (scala 2.8):

myTuple.productIterator.toList 

Scala 2.7:

(0 to (myTuple.productArity-1)).map(myTuple.productElement(_)).toList 

Nicht sicher, wie Typinformationen für eine allgemeine Produkt oder Tuple zu halten, sondern für Tuple2 :

def tuple2ToList[T](t: (T,T)): List[T] = List(t._1, t._2) 

Sie könnten natürlich de feine ähnliche typsichere Konvertierungen für alle Tupel (bis 22).

+1

Sieht gut aus, obwohl Sie 'myTuple.productArity - 1' und' productElement() 'benötigen, gibt' Any' zurück. Gibt es eine Möglichkeit, die Informationen zum inneren Typ beizubehalten? – pr1001

+0

Die Indexierung wurde schrittweise korrigiert, und der Kommentar wurde in der Antwort beibehalten. –

+0

Danke, sieht gut aus. – pr1001

4

Shapeless Verwendung -

@ import syntax.std.tuple._ 
import syntax.std.tuple._ 
@ (1,2,3).toList 
res21: List[Int] = List(1, 2, 3) 
@ (1,2,3,4,3,3,3,3,3,3,3).toList 
res22: List[Int] = List(1, 2, 3, 4, 3, 3, 3, 3, 3, 3, 3) 

Beachten Sie, dass Typ-Informationen verwendet nicht verloren Shapeless des toList.

Verwandte Themen