2014-02-05 17 views
3

我明白None 我也知道這是多麼好的,有MyObjMyEmptyObj的概念,但我找不出當其更好地使用的None代替MyEmptyObj當我應該使用MyEmptyObj,而不是None。此外,我傾向於不希望看到返回Option[MyObj]的方法會混淆我的代碼,我寧願返回MyObj,然後無縫地調用其方法,如MyObj.toJson,因此MyEmptyObj.toJson將知道代表自己而不是case None: return some empty json您對此整個主題有何看法? 到另一邊,我可以說NoneflatMap等非常好,所以選擇哪個?在scala中使用None或EmptyMyObj?

None

以及何時Empty

+1

這是一個非常有主見的和主觀的問題,但我一般用Option'的'選擇去當我的目標是而不是某種容器類型和「MyObj」。 – wheaties

回答

3

None很好,當你沒有默認值,但如果你有一個默認的,通過一切手段使用它。

作爲一個非常簡單的例子,如果你想定義一個名爲amountOwed功能,你可以這樣做:

def amountOwed(bill: Int, alreadyPaid: Option[Int]): Option[Int] = { 
    val owed = bill - alreadyPaid.getOrElse(0) 
    if(owed == 0) None // nothing to pay! 
    else Some(owed) 
} 

但是這要複雜得多(和惱人的)比它需要的是,因爲0品牌完美的意義既是「沒有支付任何東西」和「不欠任何東西」:

def amountOwed(bill: Int, alreadyPaid: Int): Int = { 
    bill - alreadyPaid 
}