2011-10-06 7 views
0

다음 두 가지 모두 false로 인쇄됩니다. 원하는 동작은 첫 번째는 true를 인쇄하고 두 번째는 false를 인쇄합니다. 거짓이 항상 인쇄되는 이유가 확실하지 않습니다.다음 테스트가 스칼라에서 왜 false를 반환합니까?

def myTest(filter: => Boolean) =() => { 

    if (filter) { 
    // do something here 
    true 
    } 
    false 
} 

println(myTest(5 > 3)()) 
println(myTest(5 > 7)()) 

답변

14

이 표현은 : filter 사실 또는 기타 장치 ()로 평가 때

if (filter) { 
    true 
} 

는 true를 반환하는 식입니다.

이 블록은 :

{ 
    expr; 
    false 
} 

다음 false를 반환, expr 평가를 지우기 블록이다.

그래서 :

{ 
    if (filter) { 
    true 
    } 
    false 
} 

항상 false를 반환합니다. if (filter) { true } 같음 expr;

2

마지막 문장은 false이므로 false를 반환하므로 if 문에 조건부로 해당 문을 실행해야합니다. 더 실존 적 질문으로 이어질 수

def myTest(filter: => Boolean) =() => filter 

:

가 그냥 경우 표현이 완전히 중복 귀하의 필터 매개 변수가 이미 부울을 해결 지적처럼, 당신의 구조는 단순히 다시 작성할 수 있습니다.

+1

그는 '여기에 뭔가를하십시오.'- 거기에 의견을 남깁니다. –

+2

아, 옛날 "뭔가 할"일, 그게 항상 문제가있어 –

+0

<11 더 가야> –

5

huynhjl은 통사론적인 이유를 제공합니다. 현상 학적 이유로 앞에 else을 잊어 버린 것입니다.

scala> def myTest(filter: => Boolean) =() => { 
    | 
    | if (filter) { 
    |  // do something here 
    |  true 
    | } 
    | else false 
    | } 
myTest: (filter: => Boolean)() => Boolean 

scala> println(myTest(5 > 3)()) 
true 

scala> println(myTest(5 > 7)()) 
false 
관련 문제