2013-01-08 65 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是在Scala中使用這種方法的常用方法。

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

我嘗試 但我有問題,編譯,我用DOC – user1957061

+0

然後,你必須讓'doc'可用'try'的範圍之外塊。這樣做的快速和骯髒的方法是像這樣'var doc:Elem = null'初始化它,然後它在try塊中被重新分配並且可以在其外部訪問。注意在Scala中使用'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 
}