2012-08-07 49 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的情况。