[SCALA] 스칼라와 기능 시도 및 캐치
SCALA스칼라와 기능 시도 및 캐치
스칼라 리소스를 개방하고,이 메소드 그것보다 방법을 적용하는 더욱 관용적 방법이 (자바에서 직접 번역) :
var is: FileInputStream = null
try {
is = new FileInputStream(in)
func(is)
} catch {
case e: IOException =>
println("Error: could not open file.")
println(" -> " + e)
exit(1)
} finally {
if(is) is.close()
}
해결법
-
==============================
1.대출 패턴은 GitHub의에 조쉬 Suereth의 스칼라 - ARM 라이브러리에서 다양한 방식으로 구현된다.
대출 패턴은 GitHub의에 조쉬 Suereth의 스칼라 - ARM 라이브러리에서 다양한 방식으로 구현된다.
당신은 다음과 같은 리소스를 사용할 수 있습니다 :
val result = managed(new FileInputStream(in)).map(func(_)).opt
어떤 옵션에 싸여 FUNC의 결과를 반환하고 입력 스트림을 닫는 돌볼 것입니다.
리소스를 만들 때, 당신은 scala.util.control.Exception 개체와 결합 할 수있는 가능한 예외를 처리하려면 :
import resource._ import util.control.Exception.allCatch allCatch either { managed(new FileInputStream(in)).map(func(_)).opt } match { case Left(exception) => println(exception) case Right(Some(result)) => println(result) case _ => }
-
==============================
2.새 위치로 대출 패턴 (죽은 링크) 비 영구적 인 링크를 사용합니다.
새 위치로 대출 패턴 (죽은 링크) 비 영구적 인 링크를 사용합니다.
-
==============================
3.즉, 기능 갈 바람직하지 않다 한 경우 일 수 있습니다. allready 언급 대출 패턴 오류 처리의 imparative 버전의 캡슐화하지만, 그 기능을 프로그래밍 할 수 없다, 또한 오류 처리의 돌봐 doenst.
즉, 기능 갈 바람직하지 않다 한 경우 일 수 있습니다. allready 언급 대출 패턴 오류 처리의 imparative 버전의 캡슐화하지만, 그 기능을 프로그래밍 할 수 없다, 또한 오류 처리의 돌봐 doenst.
당신이 정말로 원하는 경우이 기능 오류 처리 모나드와 함께 할 수 있습니다. 스칼라 너무 잘 "하드 코어"기능 연습 이런 종류의 지원되지 않는 이유를 들어 내가 제공하는 링크는이에 하스켈 특정 문서입니다.
난 당신이 치료 오류를 원한다면 당신은 또한 다른 상황 또는 당신이 중 하나를 쓰기 특별한 기능을 가지고 오류 처리와 대출 패턴하지만 수단을 확장 할 수 ... 명령형 방법 및 사용 시도 캐치 마지막으로 가고 당신에게 권하고 것 (당신은 allready 코드에서 catch 블록 내부에 가지고있는 것보다 아무것도가없는) 오류 처리에 대한 부분적인 기능을 통해 통과해야합니다.
-
==============================
4.스칼라 2.13부터, 표준 라이브러리는 전용 자원 관리 유틸리티를 제공합니다 : 사용.
스칼라 2.13부터, 표준 라이브러리는 전용 자원 관리 유틸리티를 제공합니다 : 사용.
그것은 나중에 입력 파일과, 상관없이, 가까운 파일 자원으로 재생하려면 AutoCloseable을 구현 그것은이 FileInputStream에이 경우에 사용할 수 있습니다 :
import scala.util.{Using, Failure} import java.io.FileInputStream Using(new FileInputStream(in)) { is => func(is) }.recoverWith { case e: java.io.IOException => println("Error: could not open file.") Failure(e) }
사용 중 하나를 조작 또는 오류의 결과를 제공하는 시도를 생산하기 때문에, 우리는 시도 번호의 recoverWith를 통해 예외로 작업 할 수 있습니다.
from https://stackoverflow.com/questions/5149009/functional-try-catch-with-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 불변의 데이터 구조 파악 (0) | 2019.11.20 |
---|---|
[SCALA] 왜 하나는 프레임 워크 웹 서버 앞에 HTTP 서버를 사용해야합니까? (0) | 2019.11.20 |
[SCALA] 플레이 프레임 워크 2.X에 포함 된 개체의 암시 JSON의 기록 기능을 구현하는 방법 (0) | 2019.11.20 |
[SCALA] 왜 검증 모나드 아닌가요? (scalaz7) (0) | 2019.11.20 |
[SCALA] Implicits와 스칼라 기능 리터럴 (0) | 2019.11.20 |