尽管Scala做得很好,但不幸的是它仍然窝藏着Java领域中最坏的罪犯:可怕的罪犯
null
价值,通常被称为十亿美元的错误。
在Scala,每个
AnyRef
无效的
. 这样做并不习惯,任何经验丰富的Scala开发人员都会避免这样做
就像瘟疫一样。但它就在那里,就像一个幽灵,等待着在夜里跳起来咬毫无戒心的程序员。
Array.ofDim
返回默认的初始化值。对于
AnyVal
,这意味着它们的“零”值,所以
Array.ofDim[Int]
,这将返回
.
scala> var x = Array.ofDim[A](10) // Assuming A is some class
var x: Array[A] = Array(null, null, null, null, null, null, null, null, null, null)
理想情况下,您需要立即用一些合理的东西填充数组。或者,更好的是,使用
Array.fill
请注意,Scala 3有一个名为
-Yexplicit-nulls
无效的
大堆对外直接投资
Array[T]
即使在这种模式下,Scala 3新的空检查程序也有效地使其类型成为谎言。我的结论是
ofDim
很可能是用于分配空数组的“低级”原语,而且
fill
在大多数情况下,可能应该以相同的方式使用
asInstanceOf
是一个低级原语,应该避免使用它,以利于模式匹配(或者简单地避免完全向下转换,理想情况下)。