我正在尝试概括以下代码:
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 :(得分: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
}
答案 1 :(得分:0)
最简单的解决方案是使用一个方法来获取给定的Source
,以及两个从Source
或File
构建URL
的包装方法。
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))