2010-06-22 25 views

risposta

61
Array[String]() 

Puoi lasciare fuori la parte [String] se si può dedurre (ad esempio methodThatAlwaysTakesAStringArray(Array())).

+2

Questa versione sembra creare una sequenza vuota e chiamare 'Array.apply()' in quella sequenza. Quindi non è esattamente lo stesso di 'new Array [String] (0)'. –

+0

Puoi spiegare perché è preferibile su 'Array.empty [String]'? Trovo la risposta di sotto superiore, poiché è meno ambigua quando viene letta. – Shuklaswag

6

Array() sarà sufficiente, la maggior parte delle volte. Sarà del tipo Array[Nothing].

Se si utilizza conversioni implicite, potrebbe essere necessario scrivere in realtà Array [Niente], a causa di Bug #3474:

def list[T](list: List[T]) = "foobar" 
implicit def array2list[T](array: Array[T]) = array.toList 

Questo non funziona:

list(Array()) => error: polymorphic expression cannot be instantiated to expected type; 
    found : [T]Array[T] 
    required: List[?] 
     list(Array()) 
       ^

Questo sarà:

list(Array[Nothing]()) //Nothing ... any other type should work as well. 

Ma questo è solo un caso angoscioso di impliciti. È possibile che questo problema scompaia in futuro.

52
val emptyArray = Array.empty[Type] 
+0

Questo ha funzionato anche per me quando il tipo poteva essere dedotto: Array.empty –

0

Se il tipo di matrice è uno dei primitivi, è possibile utilizzare le scorciatoie da scala.Array.

Ad esempio per un array di byte sarebbe:

val arr = Array.emptyByteArray 

Questo è utile quando il tipo non si può dedurre e si desidera rimanere meno prolissa.

Problemi correlati