2012-08-07 14 views
6

z odsetek dlaczego to działa w Scala:lista zawiera Scala vs tablica zawiera

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

ale to nie

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

To byłby świetny Scala Puzzler! – soc

Odpowiedz

8

Bo napisałeś nowy ArrayChar. Robiąc to, argumentem jest rozmiar tablicy, a "+" jest raczej niestety konwertowane na int, by nadać rozmiar. A zwrócona tablica jest pełna Char (0).

Powinieneś po prostu zrobić Array[Char]('+'), '+' byłby wtedy pojedynczym elementem w Tablicy.

7

Spróbuj w REPL, który sprawia, że ​​odpowiedź oczywista:

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

+ ma promocji char-to-int.

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

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

jest odpowiednikiem przypadku List.