2012-03-19 34 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 
    } 
相关问题