Scala可变集合和“引用必须带有前缀警告”

时间:2013-08-12 20:54:16

标签: scala pattern-matching scala-collections

我必须为特定用例使用可变链表。但是,我想避免“引用必须加前缀”警告。

别名导入似乎是一个解决方案:

import scala.collection.mutable.{LinkedList => MutableLinkedList}

它适用于大多数情况,除了模式匹配空LinkedList,这仍然会产生警告:

case MutableLinkedList() => // do Something

我可以删除此警告的唯一方法是在空列表中执行完全限定的案例检查:

case scala.collection.mutable.LinkedList() => // do Something

为什么第一种情况没有消除警告?

2 个答案:

答案 0 :(得分:18)

只需导入mutable包:

import collection.mutable

并将其与任何可变集合一起使用:

mutable.LinkedList(1, 2, 3)

或者如果您更喜欢更简洁的变体:

import collection.{mutable => m}
m.LinkedList(1, 2, 3)

它也适用于模式匹配。

答案 1 :(得分:2)

我在2.10.2 shell中尝试过,没有看到任何警告。

mutable.LinkedList提取器“别名”的一种方法是:

scala> MutableLinkedList(1,2,3,4,5)
res0: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3, 4, 5)

scala> val LL = MutableLinkedList
LL: scala.collection.mutable.LinkedList.type = scala.collection.mutable.LinkedList$@5798795f

scala> res0 match { case LL(1,2, _*) => "yey"; case _ => "bad" }
res3: String = yey

请参阅?现在LL指向MutableLinkedList 随播广告