2014-02-05 3 views
3

Я понимаю концепцию None Я также понимаю, как хорошо иметь MyObj а также MyEmptyObj, но я не могу понять, когда его лучше использовать None вместо MyEmptyObj и когда я должен использовать MyEmptyObj вместо None. Также я не люблю видеть методы, которые возвращают Option[MyObj], он загромождает мой код. Я предпочитаю возвращать MyObj, а затем без проблем называть его методы, такие как MyObj.toJson, и поэтому MyEmptyObj.toJson будет знать, чтобы представлять себя, а не иметь case None: return some empty json Что вы думаете по этому поводу? ? С другой стороны могу сказать, что None отлично сочетается с flatMap и т. Д., Так что выбрать?использовать None или EmptyMyObj в scala?

когда 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 
} 
Смежные вопросы