2009-10-10 2 views
25

는, 스칼라는 캐치 또는 finally 절 중 하나없이, 당신은이 베어 "시도"수행 할 수 있습니다스칼라의 "시도"는 캐치 또는 마침내 차단없이 무엇을 의미합니까? 자바와는 달리

scala> try { println("Foo") } 
Foo 

이 실제로 넘어 어떤 의미를 가지고 있는가,

{ println("Foo") } 

?

+1

Scala 2.11부터 경고 메시지가 나타납니다. '경고 : 잡기가없는 시도 또는 마침내 그 몸을 블록에 넣는 것과 같습니다. 어떤 예외도 처리되지 않습니다. " – Jus12

답변

25

스칼라의 예외 처리는 예외를 익명 catch 함수에 전달하여 작동합니다. catch 함수는 catch 된 예외를 패턴 일치시켜 작동하고, 일치하지 않으면 예외를 전달합니다.

catch 기능은 선택 사항입니다. 생략하면 예외가 곧바로 전달됩니다. 그래서 본질적으로

try { exceptionThrowingFunction() } 

은 자세한 내용은 language spec PDF의

exceptionThrowingFunction() 

장 참조 6.22과 동일합니다.

1

나는 그렇게 생각하지 않는다. 나는 스칼라가 그것을 막을 이유가 없기 때문에 캐치없이 시도 할 수 있다고 생각한다.

+5

글쎄요, 벌거 벗은"시도 "를 사용할 실제 이유가 없다고 가정 할 때, 프로그래머의 실수를 잡아 잠재적 인 혼란을 줄이는 것이 금지되는 이유입니다. 그러나 확실히, 그것은 어느 것이 든 큰 문제가 아닙니다. –