Scala:限制参数值

Scala:限制参数值,scala,Scala,有没有办法限制Scala函数中参数的值?例如,如果我有一个名为flag的参数,我只希望用户能够提交值0或1作为该参数的有效值 我知道我可以编写一个简单的if语句,检查值,如果不可接受,则返回某种错误消息,但我认为可能有一种更简洁的方法,例如,当参数在函数声明中命名时。在Scala中,我通常采用的方法是使用case对象创建一个基本特征: sealed trait Color case object Red extends Color case object Green extends Color

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


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

在Scala中,我通常采用的方法是使用case对象创建一个基本特征:

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

//...
def myFn(arg:Color) = //...
你想要的是“依赖类型”。这种调用在支持它的语言中可能是编译错误。不幸的是scala不支持它

两种典型的解决方法是使用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 }


下划线在这个主题上写了一篇很好的博文-。谢谢,这很完美,实际上解决了我的另一个问题@KevinMeredith,希望我能给你一些链接的分数!为了将其添加到简单的if语句中,可以使用
require()
,例如:
require(flag==0 | | flag==1,“错误的标志值”)
sealed trait EnableStatus
case object Enabled extends EnableStatus
case object Disabled extends EnableStatus

def setEnabled(es: EnableStatus)