Scala执行报错:类型不匹配,found List[String] required IterableOnce[Nothing]
问题根因
- 你定义
var merge = List()的时候没有显式指定List的元素类型,Scala编译器会自动把空List的类型推断为List[Nothing] Nothing是Scala类型系统里的最底类型,不存在实例,也无法兼容你后续追加的List[String]类型数据,所以调用++=方法的时候会报类型不匹配的错误
修复方案
只需要修改merge变量的定义,显式指定元素类型为String即可:
var merge: List[String] = List() // 或者更简洁的写法 var merge = List.empty[String]
额外优化建议
如果后续需要频繁对集合做追加操作,List是不可变集合,每次++=都会生成新的List实例,性能较差,可以改用可变集合ListBuffer:
import scala.collection.mutable.ListBuffer var merge = ListBuffer[String]() // 后续追加元素的逻辑不变,仍然可以用++= merge ++= Source.fromFile(filepath).getLines.toList // 最后需要转成List的话调用toList即可 val mergeList = merge.toList
内容的提问来源于stack exchange,提问作者Dhrumil Shah
相关产品推荐
相关产品推荐

