listas ejemplos scala scala-2.8

ejemplos - listas en scala



Escribiendo funciones de tuplas convenientemente en Scala (6)

Algunas funciones en el Map toman una función en una tupla de valor-clave como argumento. Por ejemplo, def foreach(f: ((A, B)) ⇒ Unit): Unit . Así que busqué una forma corta de escribir un argumento para foreach :

> val map = Map(1 -> 2, 3 -> 4) map: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2, 3 -> 4) > map.foreach((k, v) => println(k)) error: wrong number of parameters; expected = 1 map.foreach((k, v) => println(k)) ^ > map.foreach({(k, v) => println(k)}) error: wrong number of parameters; expected = 1 map.foreach({(k, v) => println(k)}) ^ > map.foreach(case (k, v) => println(k)) error: illegal start of simple expression map.foreach(case (k, v) => println(k)) ^

puedo hacer

> map.foreach(_ match {case (k, v) => println(k)}) 1 3

¿Alguna alternativa mejor?


En tales casos a menudo utilizo la sintaxis.

for ((k,v) <- map) println(k)

De acuerdo con el Capítulo 23 en "Programación en Scala", el bucle anterior de for se traduce para llamar a foreach .


Estuve bastante cerca con el último intento, en realidad:

> map.foreach({case (k, v) => println(k)}) 1 3


También puede acceder a una tupla de la siguiente manera:

scala> val map = Map(1 -> 2, 3 -> 4) map: scala.collection.immutable.Map[Int,Int] = Map((1,2), (3,4)) scala> map foreach (t => println(t._1)) 1 3


Una alternativa es el método tupled del objeto Function :

import Function.tupled; // map tupled foreach {(k, v) => println(k)} map foreach tupled {(k, v) => println(k)}


map.foreach(case (k, v) => println(k)) muy cerca con map.foreach(case (k, v) => println(k)) . Para usar el case en una función anónima, rodéalo con llaves.

map foreach { case (k, v) => println(k) }


Welcome to Scala version 2.8.0.Beta1-prerelease (OpenJDK Server VM, Java 1.6.0_0). Type in expressions to have them evaluated. Type :help for more information. scala> val m = Map(''a -> ''b, ''c -> ''d) m: scala.collection.immutable.Map[Symbol,Symbol] = Map(''a -> ''b, ''c -> ''d) scala> m foreach { case(k, v) => println(k) } ''a ''c