2013-08-12 3 views
8

Devo utilizzare un elenco mutabile per un caso d'uso specifico. Tuttavia, mi piacerebbe evitare gli avvertimenti "Riferimento deve essere prefissato".Le collezioni modificabili Scala e "Il riferimento deve essere avvisi predefiniti"

Aliasing l'importazione sembra essere una soluzione:

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

funziona sulla maggior parte dei casi, se non in pattern matching un LinkedList vuoto, questo produce ancora l'avvertimento:

case MutableLinkedList() => // do Something 

l'unico modo che può rimuovere questo avviso sembra essere quella di fare un controllo completo sul caso una lista vuota:

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

Perché il primo caso non elimina l'avviso?

risposta

15

Basta importare mutable pacchetto:

import collection.mutable 

e utilizzarlo con qualsiasi raccolta mutevole:

mutable.LinkedList(1, 2, 3) 

o se si preferisce la variante più concisa:

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

Funzionerà anche con la corrispondenza del modello.

+3

spiegazione https://blog.jetbrains.com/scala/2012/05/26/mutableimmutable-collections-prefix-convention-support/ – user7610

2

L'ho provato nella shell 2.10.2 e non ho visto alcun avviso.

Un modo di "aliasing" l'estrattore mutable.LinkedList sta facendo:

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 = [email protected] 

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

Vedi? Ora i punti LL all'oggetto MutableLinkedListcompagno

+0

L'avviso era in arrivo in IntelliJ Community Edition, il tuo suggerimento funziona meravigliosamente. Grazie. – ArtisanV

Problemi correlati