2013-01-08 1 views
1

저는 Scala로 프로그램을 작성했습니다. 기본 생성자에는이 줄이 있습니다.try/catch 블록이있는 기본 생성자에서의 문제

private val url = new URL("http://www. ** .xml") // throws UnknownHostException 
private val conn = url.openConnection 
private val doc = XML.load(conn.getInputStream) 

인터넷 통신 문제가있는 것으로 알고있는 경우 예외가 발생합니다. 예외.

try/catch 블록에이 줄을 쓰는 데 여러 가지 방법을 시도했습니다. 하지만 언제나 클래스의 다른 곳에서이 변수를 사용하는 곳에서 다른 컴파일 오류를 보여줍니다.

물론 나는 블록 안에 그것들을 썼습니다. 변수를 공개로 정의했습니다.

누군가가 나에게 올바르게 작성하는 방법을 보여줄 수 있습니까?

내가 충분히 구체적인 것은 아니지만 정확하게 어디에 문제가 있는지 모르기 때문에 정확히 설명해야 할 부분을 알지 못했습니다.

답변

1

try/catch 블록에 pattern matching을 사용하는 것은 스칼라에서 이것을 접근하는 관용적 인 방법입니다.

import java.net.URL 
import java.net._ 
import scala.xml.XML 
try{ 
    val url = new URL("http://www. ** .xml") 
    val conn = url.openConnection 
    val doc = XML.load(conn.getInputStream) 
}catch{ 
    case uhe:UnknownHostException => println(uhe) 
} 
+0

하지만 난 당신'은'try'의 범위 doc' 외부에서 사용할 수 있도록해야 다음 문서 – user1957061

+0

을 사용하여 문제가 컴파일이 블록. 이것을하기위한 빠르고 더러운 방법은이'var doc : Elem = null'처럼 초기화하는 것입니다. 그런 다음 try 블록에서 다시 할당되고 외부에서 액세스 할 수 있습니다. 스칼라에서'Option'을 사용하는 것이'null'보다 바람직합니다. – Brian

+0

이제 다른 문제가 있습니다. 하지만이 도움을 주신 덕분에 – user1957061

0

이 개선 될 수 있습니다 내가 시도

import java.net.URL 
import java.net._ 
import scala.xml.XML 

val doc = 
    try { 
    val url = new URL("http://www.xxx.yyy/XYZZY.xml") 
    val conn = url.openConnection 
    Right(XML.load(conn.getInputStream)) 
    } 
    catch { 
    case ex: Exception => Left(ex) 
    } 

doc match { 
    case Right(xmlDoc) => // Do stuff with the doc XML 
    case Left(ex)  => // Do error stuff with the exception 
} 
관련 문제