Word不会被添加到字典中

时间:2013-11-28 14:33:30

标签: arrays list scala

我有这个方法从文本文件中读取,并且应该将包含单词的每一行附加到List,字典。这些单词被正确读取(由println(word)验证),但是,dictionary没有附加任何内容。它仍然是空的。

/**
  * 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
}

我做错了什么?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

这是因为不可变列表由于以下原因而生成 new 集合:+ operation。你把那个收藏品扔掉了。

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