Scala列表包含vs数组包含

chr*_*isb 6 scala

出于兴趣,为什么这在Scala中有效:

val exceptions = List[Char]('+')    
assertTrue(exceptions.contains('+'))
Run Code Online (Sandbox Code Playgroud)

但这不是

val exceptions = new Array[Char]('+')    
assertTrue(exceptions.contains('+'))
Run Code Online (Sandbox Code Playgroud)

Did*_*ont 9

因为你写了新的 ArrayChar.这样做,参数是数组的大小,而不幸的是,'+'被转换为int来给出大小.返回的数组充满了Char(0).

你应该这样做Array[Char]('+'),'+'然后将是Array中的单个元素.


the*_*mel 7

尝试REPL,这使答案显而易见:

scala> val exceptions = new Array[Char]('+')
exceptions: Array[Char] = Array( ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  )
Run Code Online (Sandbox Code Playgroud)

+ 有char-to-int促销.

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

scala> exceptions.contains('+')
res3: Boolean = true
Run Code Online (Sandbox Code Playgroud)

是等同于List案件.