2012-03-19 12 views
0

私は、次のコードを一般化しようとしている:私は同じ方法でURLの(fromURL)とファイル(fromFileの)を取り出すことができるようにしたい方法を一般化するには?

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

を。これをアーカイブするためにこのコードを一般化することは可能ですか?

私はこれにパターンマッチングを使うことができると考えましたが、どのようにすればよいか分かりません。

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

この権利を取得する方法はありますか?

ありがとうございます。

答えて

0

最も簡単な解決策は、File又はURLからSourceを構築Source与えられ、二つのラッパー・メソッドをフェッチする一つの方法を有することです。

文字列がURL(この例では、私はのjava.net.URLを使用してんだけど、あなたにも UrlValidatorでそれを行うことができます)このような

何かであるかどうかをチェックでき

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

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 
    } 
関連する問題