2013-05-13 1 views
2

내가 함수에 기본적으로 다음과 같은 코드가 필요하고, 나는 doSomethingElse()의 중복을 제거하고 싶습니다 :경우는 다른 절

fun a -> 
    if a = b then 
     let c = expensiveOperation() 
     if c = d then 
      result 
     else 
      doSomethingElse() 
    else 
     doSomethingElse() 

내가 모두 다른 조항을 제거 할 수 있어야한다고 생각합니다. result 또는 doSomethingElse() 중 하나를 반환하십시오. 그럴 때 컴파일러의 오류 메시지는 다음과 같습니다. "이 표현식에는 유형 단위가 있어야하지만 여기에는 int 유형이 있습니다."

if 표현식에 else 절이 필요한 이유는 무엇입니까?

+3

이 질문은 여기에 대한 답변 : http://stackoverflow.com/a/16490473/701062 –

답변

3

이것은 여러분이 작성한 것과 동일하지만, 다른 것을 의미하는지 궁금합니다.

if a = b && expensiveOperation() = d then result 
else doSomethingElse() 
+0

목표는'expensiveOperation을 피하기 위해이었다()'내가 부울 식의 바로 가기에 대해 생각하지 않았다. '&&''a = b' 인 경우에만 rhs를 평가할 것이므로 여러분이 제안한 것을 할 수 있습니다. – jeffesp