6

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

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

但这不是

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

2 回答 2

9

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

您应该这样做Array[Char]('+')'+'然后将是数组中的单个元素。

于 2012-08-07T09:33:44.047 回答
7

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

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

+有 char-to-int 提升。

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

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

是等价的List情况。

于 2012-08-07T09:34:42.853 回答