2012-08-07 10 views
6

Como curiosidad por qué funciona esto en Scala:lista Scala contiene vs matriz contiene

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

pero esto no

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

¡Este sería un gran rompecabezas de Scala! – soc

Respuesta

8

Debido a que usted escribió nueva ArrayChar. Al hacer eso, el argumento es el tamaño de la matriz, y el '+' es, por desgracia, convertido a un int para dar el tamaño. Y la matriz devuelta está llena de Char (0).

Simplemente debe hacer Array[Char]('+'), '+' sería entonces un elemento único en la matriz.

7

Trate en el REPL, que hace que la respuesta obvia:

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

+ tiene la promoción-char a int.

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

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

es el equivalente al caso List.

Cuestiones relacionadas