Ho provato la ricerca su Google e non sono riuscito a trovare un esempio decente forall
. Che cosa fa? Perché richiede una funzione booleana?Scala per tutti gli esempi?
Prego indicarmi un riferimento (eccetto lo Scaladoc).
Ho provato la ricerca su Google e non sono riuscito a trovare un esempio decente forall
. Che cosa fa? Perché richiede una funzione booleana?Scala per tutti gli esempi?
Prego indicarmi un riferimento (eccetto lo Scaladoc).
Il metodo forall
accetta una funzione p
che restituisce un booleano. La semantica di forall
dice: restituire true
se per ogni x
nella raccolta, p(x)
è true.
Quindi:
List(1,2,3).forall(x => x < 3)
significa: true
se 1, 2, e 3 sono meno del 3, false
altrimenti. In questo caso, si valuterà di false
dato che non è il caso di tutti gli elementi sono meno di 3: 3 è non inferiore a 3.
C'è un metodo simile exists
che restituisce true
se c'è almeno un elemento x
nella raccolta in modo che p(x)
sia vero.
Quindi:
List(1,2,3).exists(x => x < 3)
significa: true
se almeno uno di 1, 2, e 3 è inferiore a 3, false
altrimenti. In questo caso, valuterà a true
dato che alcuni elementi sono meno di 3: ad es. 1 è inferiore a 3.
Un rapido esempio di come è possibile giocare con questa funzione utilizzando uno script Scala
.
creare un file myScript.scala
con
println(args.forall(p => (p.equals("a"))))
e lo chiamano con
scala myScript.scala a a a // true
scala myScript.scala a b c // false
perché non utilizzare il REPL? –
anche bene ricordare che all'interno della vostra chiusura è possibile eseguire più comandi ad esempio l'assegnazione di fuori delle variabili di scope
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: 'Verifica se un predicato vale per tutti gli elementi di questo elenco. – MikkoP
forse sei confuso perché hai pensato della funzionalità di 'foreach' invece (itera su tutti gli elementi) –
Sì, stavo pensando che fosse una versione parallela di foreach. – Jus12