3
object NoSense {
def main(args: Array[String]) {
val value = "true" match {
case value @ (IntValue(_) | BooleanValue(_)) => value
}
require(value == true)
}
}
class Value[T](val regex: Regex, convent: String => T) {
def unapply(value: String): Option[T] = value match {
case regex(value, _*) => Some(convent(value))
case _ => None
}
}
object IntValue extends Value[Int]("[0-9]+".r, _.toInt)
object BooleanValue extends Value[Boolean]("((true)|(false))".r, _.toBoolean)
main
方法中的require
将失败。
但是这一次是确定Scala替代案例匹配不同类型的提取值的语法
def main(args: Array[String]) {
val value = "true" match {
case IntValue(value) => value
case BooleanValue(value) => value
}
require(value == true)
}
那是Scala语言本身或我的限制,以错误的方式
对于我的用例,有没有更好的解决方案?我觉得我正在用错误的方式使用提取器? – jilen
这里没有你的提取器的用法是正确的。但你的比赛并不全面。此外,推断的值的类型是任何,它可能是不适当的,取决于上下文。 – Nicolas