Scala:限制参数值

时间:2015-07-21 18:06:00

标签: scala

有没有办法限制Scala函数中参数的值?例如,如果我有一个名为flag的参数,我只希望用户能够将值0或1作为该参数的有效值提交。

我知道我可以编写一个简单的if语句来检查值并返回某种错误消息,如果它不可接受,但我认为可能有更简洁的方法来做,比如当参数是在函数声明中命名。

2 个答案:

答案 0 :(得分:3)

我在Scala中通常采用的方法是使用案例对象制作基本特征:

sealed trait Color
case object Red extends Color
case object Green extends Color
case object Blue extends Color

//...
def myFn(arg:Color) = //...

答案 1 :(得分:3)

你想要的是"依赖打字"。这种调用在支持它的语言中是编译错误。不幸的是,斯卡拉并不支持它。

两种典型的解决方法是使用ADT而不是较大的类型,或使用受限制的构造方法的包装。

object ZeroOrOne {
  def apply(i: Int): Option[ZeroOrOne] = if (i == 0 || i == 1) Some(ZeroOrOne(i)) else None
}
case class ZeroOrOne private (i: Int)
def doStuff(zo: ZeroOrOne) { // use zo.i }

sealed trait EnableStatus
case object Enabled extends EnableStatus
case object Disabled extends EnableStatus

def setEnabled(es: EnableStatus)