2012-03-19 3 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를 가져올 것이다 한 방법 및 File 또는 URL에서 Source 구축 두 랩퍼 방법을 가지고있다. 문자열이 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)) 
1

당신은 확인할 수 있습니다 (I가의 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 
    } 
관련 문제