2012-03-19 39 views
0

我想概括如下代碼:如何概括一種方法?

def fetchUrl = { 
    try { 
    val lineList = Source.fromURL(url).getLines.toList 
    process(lineList) 
    } 
    catch { 
    case ex: java.net.UnknownHostException => ex.printStackTrace() 
    } 
} 

我希望能夠用同樣的方法來獲取的URL(fromURL)和文件(FROMFILE)。是否有可能將此代碼進行概括歸檔?

我想我可以使用模式匹配,但我不知道如何。

def fetchSource(src: Source, str: String) = src match { 
    case ??? => Source.fromURL(url).getLines.toList 
    case ??? => Source.fromFile(str).getLines.toList 
} 

有沒有辦法解決這個問題?

在此先感謝。

回答

0

最簡單的解決方案是有一個方法,將獲取一個給定的Source,和從FileURL建立Source兩個包裝方法。

def fetchSource(source: io.Source) = 
    try { 
    val lineList = source.getLines.toList 
    process(lineList) 
    } catch { 
    case ex: java.net.UnknownHostException => ex.printStackTrace() 
    } 

def fetchFile(file: java.io.File) = fetchSource(io.Source.fromFile(file)) 

def fetchUrl(url: java.net.URL) = fetchSource(io.Source.fromURL(url)) 
1

你可以檢查一個字符串是一個URL(在這個例子中,我使用的java.net.URL,但你可以UrlValidator做得一樣好)

事情是這樣的:

def isUrl(url: String) = try { 
     new java.net.URL(url) 
     true 
    } catch { 
     case _ => false 
    } 


import scala.io.Source 

def fetchSource(src:String) = if(isUrl(src)) { 
     Source.fromURL(src).getLines.toList 
    } else { 
     Source.fromFile(src).getLines.toList 
    }