从可选案例类创建的显而易见的角度来看,最好使用什么Api?
假设我有这个案例类
case class Position(position: Int)
并且位置不应超出范围[0,18]。另外我希望这是fp友好的,所以当违反这个约束时,参数不能被异常拒绝。
是否有比使用工厂方法产生选项的更好的方法,
object Position {
def apply(position: Int): Option[Position] =
if (in range) Some(Position(position)) else None
}
调用此项时,不清楚将返回选项
val p = Position(99)
这会更好吗?
object Position {
def maybe(position: Int): Option[Position] =
if(in range) Some(Position(position)) else None
}
然后用法变为,
val p = Position.maybe(99)
但maybe
只是澄清结果类型的样板。
这是我使用的解决方案,它基于链接的重复答案,
case class Port private(portNumber: Int)
object Port {
private val ValidRange = Range(0, 65535+1)
def opt(portNumber: Int): Option[Port] =
if (ValidRange contains portNumber)
Some(Port(portNumber))
else
None
}
选择 opt
而不是fromInt
,make
或create
,因为这会提示结果为Option[T]
。