2013-11-28 3 views
-1

텍스트 파일에서 읽는이 방법을 사용하면 단어가 들어있는 각 줄을 List, 사전에 추가해야합니다. 단어는 잘 읽히고 (println(word)으로 확인), dictionary에는 아무 것도 첨부되지 않습니다. 그것은 비어 있습니다.Word가 사전에 추가되지 않음

/** 
    * Load words from dictionary file. 
*/ 
private def loadDictionary(): Array[String] = { 
    var dictionary: List[String] = List() 
    try { 
     for(word <- Source.fromFile("words.dic").getLines) { 
      dictionary :+ word // As I understand, :+ appends to a list? 
      println(word) // Prints a word from file e.g. aardvark. 
     } 
    } 
    catch { // Catch any I/O and general exceptions 
     case ioe: IOException => displayError(ioe) 
     case e: Exception => displayError(e) 
    } 
    dictionary.toArray 
} 

내가 잘못 했습니까? 어떤 도움이라도 대단히 감사합니다.

답변

3

불변의 목록은 + 조작의 결과로 새로운 콜렉션을 생성하기 때문입니다. 그리고 당신은 그 컬렉션을 버리고 있습니다.

private def loadDictionary(): Array[String] = { 
    var dictionary: List[String] = List() 
    try { 
     for(word <- Source.fromFile("words.dic").getLines) { 
      dictionary = dictionary :+ word 
      println(word) 
     } 
    } 
    catch { // Catch any I/O and general exceptions 
     case ioe: IOException => displayError(ioe) 
     case e: Exception => displayError(e) 
    } 
    dictionary.toArray 
} 

이제 코드 선명도에 대해 이야기합니다. 왜 그렇게 코드를 반복합니까? 왜 이런 일 :

val dictionary: List[String] = try { 
     for(word <- Source.fromFile("words.dic").getLines) yield { 
      println(word) 
      word 
     } 
    } 
    catch { 
     case e: Exception => displayError(e); Nil 
    } 
    dictionary.toArray 

하거나 Source.fromFile("words.dic").getLines.toArray?

+0

목록에 더 나은 대안이 있습니까? 복사 할 필요가없고 변경할 수있는 변경 가능한 목록이 있습니까? 건배. 그 동안 나는 약간의 연구를 할 것입니다. –

+0

아마도 LinkedList입니까? –

+0

@ SamSaint-Pettersen [** 불변 목록에 대한 선행 **은 매우 저렴한 운영 (** 추가 ** 제외)] 이후입니다. (http://www.scala-lang.org/docu/files/collections -api/collections_40.html) 새 요소를 추가하면 나머지 목록이 공유됩니다. –