3 回答
TA贡献2039条经验 获得超7个赞
我完全支持Ben James的建议,为产生null的api做包装。但是编写该包装器时仍然会遇到相同的问题。所以这是我的建议。
为什么单子为什么要理解?IMO过于复杂。这是您可以执行的操作:
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")
)
或者,如果您坚持让错误消息存储参数名称,则可以执行以下操作,这将需要更多样板:
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(", ")
)
)
}
添加回答
举报