我有一个分区方法,可以创建两组字符串的元组。
def partition(i:Int) = {
dictionary.keySet.partition(dictionary(_)(i) == true)
}
我还有一个映射,它将整数映射到分区方法的返回值。
val m = Map[Int, (Set[String], Set[String])]()
for (i <- Range(0, getMaxIndex())) {
m(i) = partition(i)
}
问题是我有类型不匹配错误,但错误消息对我没有意义。
可能出现什么问题?
这是代码:
import scala.collection.mutable.Map
import scala.collection.{BitSet}
case class Partition(dictionary:Map[String, BitSet]) {
def max(x:Int, y:Int) = if (x > y) x else y
def partition(i:Int) = {
dictionary.keySet.partition(dictionary(_)(i) == true)
}
def getMaxIndex() = {
val values = dictionary.values
(0 /: values) ((m, bs) => max(m, bs.last))
}
def get() = {
val m = Map[Int, (Set[String], Set[String])]()
for (i <- Range(0, getMaxIndex())) {
m(i) = partition(i)
}
m
}
}
答案 0 :(得分:1)
编译示例时,错误很明显:
<console>:64: error: type mismatch;
found : (scala.collection.Set[String], scala.collection.Set[String])
required: (scala.collection.immutable.Set[String], scala.collection.immutable.Set[String])
m(i) = partition(i)
^
查看API,可变映射的keySet
方法不保证返回的集合是不可变的。将此与keySet
在不可变映射上进行比较 - 它确实确实返回一个不可变集。
因此,您可以
Map
和var
partition
方法的结果返回不可变集(例如toSet
)collection.Set
,而不是Predef.Set
,collection.immtuable.Set
的别名。为了澄清这些类型,有助于为公共方法指定显式返回类型(get
和partition
)