2012-09-22 3 views
39

Google 검색을 시도했지만 괜찮은 forall 예제를 찾을 수 없습니다. 그것은 무엇을합니까? 부울 함수를 사용하는 이유는 무엇입니까?스칼라 예를 들어?

나를 참조하십시오 (Scaladoc 제외).

+6

http://www.scala-lang.org/api/current/scala/collection/immutable/List.html :'이 목록의 모든 요소에 대해 조건부가 사용되는지 여부를 테스트합니다. ' – MikkoP

+1

생각 했으므로 혼란 스러울 수도 있습니다. 'foreach'의 기능을 대신 사용하십시오 (모든 요소를 ​​반복합니다). –

+1

예, foreach의 병렬 버전을 생각하고있었습니다. – Jus12

답변

64

forall 메서드는 부울을 반환하는 p 함수를 사용합니다. forall의 의미는 다음과 같이 말합니다. 컬렉션에있는 x 개마다 을 반환하면 p(x)이 true입니다.

그래서 :

List(1,2,3).forall(x => x < 3) 

의미 : 1, 2, 3과 달리, 3 미만일 false이다 true 경우. 3 적어도 하나의있을 경우 true를 반환 유사한 방법 exists있다 이하 3.

보다 : 그것은 모든 요소가 3 미만이되는 경우가 있기 때문에이 경우, false로 평가합니다 p(x)이 참이되도록 컬렉션의 요소 x이 참입니다.

그래서 :

List(1,2,3).exists(x => x < 3) 

의미 : 1, 2, 3 중 적어도 하나는 3 개 미만, 그렇지 false이다 true경우. 이 경우, 일부 요소가 3보다 작은 경우이므로, true으로 평가 될 것이다. 1이 3보다 작습니다.

+2

그래서'forall (foo)'는'foldLeft (true) (x, y) => x & foo (y))'와 동일합니다.' – Jus12

+5

@ Jus12 예, 그렇기 때문에'&&' 단락 평가 ('false '를 발견하면'foo' 평가를 중단합니다). – dhg

3

Scala 스크립트를 사용하여이 기능으로 어떻게 재생할 수 있는지에 대한 간단한 예입니다.

println(args.forall(p => (p.equals("a")))) 

myScript.scala 파일을 생성하고 폐쇄 내에서 더 많은 명령은 범위 변수에서 지정하는 예 실행할 수있는 기억

scala myScript.scala a a a // true 
scala myScript.scala a b c // false 
+4

왜 REPL을 사용하지 않습니까? –

0
또한

좋은으로 전화

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") 

}