[SCALA] "반환"과 스칼라에서 "시도 - 캐치 마지막으로"블록 평가
SCALA"반환"과 스칼라에서 "시도 - 캐치 마지막으로"블록 평가
다음 두 코드는 다른 결과를 생성합니다 :
def x = try{
true
} finally false
호출 X는 사실 얻는다
def y:Boolean = try{
return true
} finally {
return false
}
호출 Y는 거짓 도착
자바와 같은 반환 버전 동작합니다.
개인적으로 나는 스칼라에서 '수익'을 사용하지 않습니다. 그러나 그것의 좋은 스칼라 try-catch-finally 블록의 가치를 평가하는 방법을 알고 있습니다. 감사.
해결법
-
==============================
1.당신은 (그것이 기술적으로 적어도 자바, 예를 금지 그것을 위해 C #으로 허용 되더라도)는 finally 블록에서 return 문이 안된다.
당신은 (그것이 기술적으로 적어도 자바, 예를 금지 그것을 위해 C #으로 허용 되더라도)는 finally 블록에서 return 문이 안된다.
스칼라는 finally 블록은 암시 적 반환하고자 항상 소지품 의도 반환 값이 있다면. 그래서 이해되지 않는다.
그러나 나는 당신이 명시 적으로 그런 식으로 작성하는 경우가 당신을 도울 수 있다고 생각.
-
==============================
2.스칼라 언어 사양에 따르면 :
스칼라 언어 사양에 따르면 :
이 문제는 그 사양에 모순이있는 것으로 보인다. '복귀'기능에서 즉시 반환, try 블록에 대한 표준 동작을 오버라이드 (override)에서이 결과를 야기하기 때문에 나는 그렇게 생각한다. 조명 예입니다 :
def z : Boolean = { val foo = try { true } finally { return false } true }
Z를 호출하면 false를 반환합니다.
from https://stackoverflow.com/questions/8443743/return-and-try-catch-finally-block-evaluation-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 황조롱이 함수형 프로그래밍 디자인 패턴의 부가가치는 무엇인가? (스칼라) (0) | 2019.11.17 |
---|---|
[SCALA] 스파크 Dataframe 랜덤 UUID는 모든 변환 / 액션 후 변경 (0) | 2019.11.17 |
[SCALA] 익명 함수 대에 의해-name 매개 변수 (0) | 2019.11.17 |
[SCALA] "구조적인 세련미의 매개 변수 유형은 정제 외부에서 정의하는 추상 형식을 참조 할 수 없습니다" (0) | 2019.11.17 |
[SCALA] 작업 직렬화 할 수없는 오류 : 스칼라 불꽃 (0) | 2019.11.17 |