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
이 실패합니다.
하지만이 하나는 괜찮습니다스칼라 대체 사례가 다른 유형의 추출 값과 구문을 일치시킵니다.
def main(args: Array[String]) {
val value = "true" match {
case IntValue(value) => value
case BooleanValue(value) => value
}
require(value == true)
}
그 자체가 스칼라 언어의 한계입니까 아니면 잘못된 방식으로하고 있습니까
내 경우에 더 좋은 해결책이 있습니까? 추출기를 잘못 사용하고있는 것 같습니까? – jilen
여기서 추출기를 올바르게 사용하지 마십시오. 그러나 당신의 경기는 전부가 아닙니다. 또한 추론 된 값 유형은 모두이며, 상황에 따라 부적절 할 수 있습니다. – Nicolas