如何测试并查看是否在 Scala 中设置了变量。在 PHP 中,您将使用 isset()
我正在寻找一种方法来查看是否在数组中设置了键。
PHP 和 Scala 是如此不同,以至于没有直接的等价物。首先,Scala 提倡不可变变量(final
在 Java 世界中),因此我们通常会争取始终设置的变量。
您可以检查null
:
var person: Person = null
//...
if(person == null) {//not set
//...
}
person = new Person()
if(person == null) {//set
//...
}
但这是一个糟糕的做法。最惯用的方法是使用Option
:
var person: Option[Person] = None
//...
if(person.isDefined) {//not set
//...
}
person = Some(new Person())
if(person.isDefined) {//set
//...
}
同样,使用isDefined
不是最惯用的方式。考虑map
和模式匹配。
首先,Array
在 Scala 中没有键。它们有索引,并且所有索引都有值。不过,请参阅下面有关如何初始化这些值的编辑。
您可能的意思是Map
, 其中有键。isDefinedAt
您可以使用or来检查键是否存在(因此是值)contains
:
map isDefinedAt key
map contains key
两者之间没有实际区别。现在,您在编辑中看到 Scala 偏爱使用Option
,并且在处理地图时也有这种方法。如果你这样做:
map get key
您将收到一个Option
回复,None
如果密钥(因此,值)不存在,这将是。
编辑
这是原始答案。我现在注意到这个问题并不完全是关于这个的。
实际上,JVM 上的所有字段都由 JVM 本身预先初始化,这会将其归零。在实践中,所有引用字段最终都指向null
,布尔值被初始化为false
,所有其他原语都被初始化为它们的版本为零。
Scala 中没有“未定义”字段这样的东西——你甚至不能写这样的东西。您可以编写var x: Type = _
,但这只会导致 JVM 初始化值。您可以null
在有意义的地方使用 来表示未初始化,但惯用的 Scala 代码会尽量避免这样做。
指示某个值不存在的可能性的常用方法是使用Option
. 如果你有一个值,那么你得到Some(value)
. 如果你不这样做,你会得到None
. 请参阅有关各种使用方式的其他 Stack Overflow 问题Option
,因为您也不会像variable.isDefined
在惯用代码中那样使用它(尽管它有效)。
最后,请注意惯用的 Scala 代码使用var
不多,更喜欢val
. 这意味着您不会设置事物,而是生成该事物的新副本,并将该值设置为其他事物。