可选案例类创建的API与常见的开发人员期望相匹配

时间:2014-11-27 14:09:32

标签: scala option case-class

从可选案例类创建的显而易见的角度来看,最好使用什么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而不是fromIntmakecreate,因为这会提示结果为Option[T]

0 个答案:

没有答案