Probé la búsqueda de Google y no pude encontrar un ejemplo decente forall
. ¿Qué hace? ¿Por qué toma una función booleana?Scala por ejemplo?
Por favor, indíqueme una referencia (excepto el Scaladoc).
Probé la búsqueda de Google y no pude encontrar un ejemplo decente forall
. ¿Qué hace? ¿Por qué toma una función booleana?Scala por ejemplo?
Por favor, indíqueme una referencia (excepto el Scaladoc).
El método forall
toma una función p
que devuelve un valor booleano. La semántica de forall
dice: return true
if por cada x
en la colección, p(x)
es verdadero.
Así:
List(1,2,3).forall(x => x < 3)
significa: true
si es 1, 2, y 3 son de menos de 3, false
lo contrario. En este caso, se evaluará a false
ya que no es el caso de todos los elementos están a menos de 3: 3 no es inferior a 3.
Hay un método similar exists
que devuelve true
si hay al menos un elemento x
en la colección tal que p(x)
es verdadero.
Así:
List(1,2,3).exists(x => x < 3)
significa: true
si al menos uno de 1, 2, y 3 es inferior a 3, false
lo contrario. En este caso, se evaluará a true
ya que es el caso de que algún elemento sea inferior a 3: p. Ej. 1 es menor que 3.
Un ejemplo rápido de cómo se puede jugar con esta función usando un script Scala
.
crear un archivo myScript.scala
con
println(args.forall(p => (p.equals("a"))))
y lo llaman con
scala myScript.scala a a a // true
scala myScript.scala a b c // false
¿por qué no utilizar REPL? –
También es bueno recordar que dentro de su cierre puede ejecutar más comandos por ejemplo, la asignación de las variables de ámbito
def main(args: Array[String]){
var country = ""
var environment = ""
val isValid = args.sliding(2, 2).forall{
case Array("--env", value : String) => {
environment = value
Array("test", "staging", "prod").contains(value.toLowerCase())
}
case Array("--country", value : String) => {
country = value
Array("BE", "NL", "FR").contains(value.toLowerCase())
}
case _ => false
}
if(!isValid){
println ("Wrong usage. Please insert params in the following format: --country {NL,BE,UK,FR} --env {test, staging, prod}")
return
}
else
println (s"Correct usage. env=$environment country=$country")
}
http://www.scala-lang.org/api/current/scala/collection/immutable/List.html: 'Comprueba si un predicado es válido para todos los elementos de esta lista. – MikkoP
tal vez te confundiste porque pensabas de la funcionalidad de 'foreach' en su lugar (iterar a través de todos los elementos) –
Sí, estaba pensando que es una versión paralela de foreach. – Jus12