我无法理解Option[T]Scala 的课程重点。我的意思是,我不能看到任何advanages None了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。同样,如果getPerson2return None,则display调用将再次失败,并显示类似错误。
如果是这样,那么Scala为什么通过引入新的值包装器(Option[T])而不是遵循Java中使用的简单方法来使事情复杂化?
更新:
我已经按照@Mitch的建议编辑了代码。我仍然看不到的任何特殊优势Option[T]。我必须测试例外情况null或None两种情况。:(
如果我从@Michael的答复中正确理解了Option[T],那么它的唯一好处是它明确告诉程序员该方法可以返回None?这是该设计选择背后的唯一原因吗?
肥皂起泡泡
慕雪6442864
相关分类