2012-08-07 81 views
6

出於興趣,爲什麼在斯卡拉做這項工作:斯卡拉列表包含VS數組包含

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

但這不

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

這將是一個偉大的Scala Puzzler! – soc 2012-08-07 23:01:11

回答

8

因爲你寫 ArrayChar。這樣做的話,參數就是數組的大小,而'+'很不幸被轉換爲int來給出大小。並且返回的數組充滿Char(0)。

您應該做Array[Char]('+'),'+'然後將是數組中的單個元素。

7

嘗試在REPL,使答案顯而易見:

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

+有焦炭到INT推廣。

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

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

相當於List的情況。