道歉,如果這是一個新手的問題... 在Scala中我明白,這是最好使用Option
而不是返回null
,當你有一個返回實例,但可能會返回任何一個功能。我明白,這使得它更好的安全問題,因爲你沒有傳遞空引用,並冒着NullPointerException
的風險。選項有更清晰的代碼
但是,有沒有比使用模式匹配更清晰的方式來處理選項? 我最終使用的語法如下:
val optObj : Option[MyObject] = myFunctionThatReturnsOption
optObj match {
case Some(obj) => {
//my code using obj
}
case None => _
}
在現實中,所有該做的是Java版本的等價物:
MyObject obj = myMethodThatCanReturnNull()
if (obj != null) {
//my code using obj
}
有一些其他的方式來避免這一切的樣板斯卡拉當使用Option
而不是null
時引用?我只想執行一段代碼,只要Option
包含一些對象(即不是None
)。
'Option'是*不*關於安全的實際;這是關於能夠更容易地處理缺失的值。 –
是的,但很容易是一個模糊的術語。擁有'if(obj!= null){} else {}'絕對容易(可以說更容易)。使用Scala的原因是以類型安全和更正確的方式來支持這些事情...... :) – jbx
如果不是null ... else null,如果你做了一次,那麼很容易,但如果你有一系列可以返回'null';此外,我甚至會說'foo.map(_。bar)'* * * * * * * *比* if(foo!= null)foo.bar else null更短,並且在一段時間之後可讀性更強。 –