Próbowałem wyszukiwania Google i nie można znaleźć przyzwoity przykład forall
. Co to robi? Dlaczego zajmuje funkcję boolowską?Scala przykład allall?
Proszę wskazać mi odniesienie (z wyjątkiem Scaladoc).
Próbowałem wyszukiwania Google i nie można znaleźć przyzwoity przykład forall
. Co to robi? Dlaczego zajmuje funkcję boolowską?Scala przykład allall?
Proszę wskazać mi odniesienie (z wyjątkiem Scaladoc).
Metoda forall
przyjmuje funkcję p
, która zwraca wartość logiczną. Semantyka z forall
mówi: return true
, jeśli dla każdego x
w kolekcji, p(x)
jest true.
Tak więc:
List(1,2,3).forall(x => x < 3)
oznacza true
jeśli 1, 2 i 3 jest mniejsza niż 3, false
inaczej. W tym przypadku będzie to ocenić na false
ponieważ nie jest w przypadku wszystkie elementy są mniejsze niż 3: 3, jest nie mniejsza niż 3.
Jest podobny sposób exists
która zwraca true
jeśli istnieje przynajmniej jeden element x
w kolekcji taki, że p(x)
jest prawdziwy.
Tak więc:
List(1,2,3).exists(x => x < 3)
oznacza true
jeśli co najmniej jeden z 1, 2 i 3, jest mniejsza niż 3, false
inaczej. W takim przypadku oceniany jest na true
, ponieważ jest tak, że element jest mniejszy niż 3: np. 1 to mniej niż 3.
Szybki przykład, jak można grać z tą funkcją przy użyciu skryptu Scala
.
utworzyć plik myScript.scala
z
println(args.forall(p => (p.equals("a"))))
i nazywają go
scala myScript.scala a a a // true
scala myScript.scala a b c // false
dlaczego nie używać REPL? –
również dobre, aby pamiętać, że w swoim zamknięciu można wykonać kolejne polecenia, np przypisanie z zmiennych zakresu
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: 'Sprawdza, czy predykat zawiera wszystkie elementy tej listy." – MikkoP
Może wpadłeś w zakłopotanie, ponieważ myślałeś funkcjonalności 'foreach' zamiast tego (iteracja przez wszystkie elementy) –
Tak, myślałem, że jest to równoległa wersja foreach. – Jus12