2012-08-07 10 views
6

Fuori di interesse perché fa questo lavoro a Scala:lista Scala contiene vs array contiene

val exceptions = List[Char]('+')  
assertTrue(exceptions.contains('+')) 

ma questo non

val exceptions = new Array[Char]('+')  
assertTrue(exceptions.contains('+')) 
+3

Questo sarebbe un grande Scala Puzzler! – soc

risposta

8

Perché si scrive nuova ArrayChar. Facendo ciò, l'argomento è la dimensione dell'array, e il '+' è, sfortunatamente, convertito in un int per dare la dimensione. E l'array restituito è pieno di Char (0).

Si dovrebbe solo fare Array[Char]('+'), '+' sarebbe quindi singolo elemento nella matrice.

7

provare in REPL, che rende la risposta ovvia:

scala> val exceptions = new Array[Char]('+') 
exceptions: Array[Char] = Array(, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ) 

+ ha promozione char-to-int.

scala> val exceptions = Array[Char]('+') 
exceptions: Array[Char] = Array(+) 

scala> exceptions.contains('+') 
res3: Boolean = true 

equivale al caso List.

Problemi correlati