我有这个方法从文本文件中读取,并且应该将包含单词的每一行附加到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
}
我做错了什么?非常感谢任何帮助。
答案 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
?