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