我无法理解Option[T]
Scala 中的课堂意义。我的意思是,我看不到None
over的任何优点null
。
例如,考虑以下代码:
object Main{
class Person(name: String, var age: int){
def display = println(name+" "+age)
}
def getPerson1: Person = {
// returns a Person instance or null
}
def getPerson2: Option[Person] = {
// returns either Some[Person] or None
}
def main(argv: Array[String]): Unit = {
val p = getPerson1
if (p!=null) p.display
getPerson2 match{
case Some(person) => person.display
case None => /* Do nothing */
}
}
}
现在假设,该方法getPerson1
返回null
,那么display
对第一行的调用main
必然会失败,并返回NPE
。同样,如果getPerson2
返回None
,display
调用将再次失败并出现一些类似的错误。
如果是这样,那么为什么 Scala 会通过引入新的值包装器(Option[T]
)而不是遵循 Java 中使用的简单方法来使事情复杂化?
更新:
我已经按照@Mitch的建议编辑了我的代码。我仍然看不到Option[T]
. 我必须测试例外情况null
或None
两种情况。:(
如果我从@Michael的回复中理解正确,唯一的好处Option[T]
是它明确告诉程序员这个方法可以返回 None吗?这是这种设计选择背后的唯一原因吗?