3 回答

TA貢獻(xiàn)2039條經(jīng)驗 獲得超8個贊
我完全支持Ben James的建議,為產(chǎn)生null的api做包裝。但是編寫該包裝器時仍然會遇到相同的問題。所以這是我的建議。
為什么單子為什么要理解?IMO過于復(fù)雜。這是您可以執(zhí)行的操作:
def buildNormalCategory
( user: User, parent: Category, name: String, description: String )
: Either[ Error, Category ]
= Either.cond(
!Seq(user, parent, name, description).contains(null),
buildTrashCategory(user),
Error(Error.FORBIDDEN, "null detected")
)
或者,如果您堅持讓錯誤消息存儲參數(shù)名稱,則可以執(zhí)行以下操作,這將需要更多樣板:
def buildNormalCategory
( user: User, parent: Category, name: String, description: String )
: Either[ Error, Category ]
= {
val nullParams
= Seq("user" -> user, "parent" -> parent,
"name" -> name, "description" -> description)
.collect{ case (n, null) => n }
Either.cond(
nullParams.isEmpty,
buildTrashCategory(user),
Error(
Error.FORBIDDEN,
"Null provided for the following parameters: " +
nullParams.mkString(", ")
)
)
}
添加回答
舉報