Scala,模式匹配,无提取

时间:2016-05-12 11:38:57

标签: scala pattern-matching

我希望创建一个不需要提取值的模式匹配器,并且没有找到一种非常令人满意的方法。假设我有以下 说明性 示例:

我希望匹配Any是一个Int

a:Any match {
  case IsAnInt => println(s"$a is an int")
}

现在我能得到的最接近的是布尔值

a:Any match {
  case IsAnInt(true) => println(s"$a is an int")
}

object IsAnInt { 
  def unapply(a:Any):Option[Boolean] = Some(a.isInstanceOf[Int]) 
}

或单位

a:Any match {
  case IsAnInt(()) => println(s"$a is an int")
}

object IsAnInt { 
  def unapply(a:Any):Option[Unit] = if (a.isInstanceOf[Int]) Some(()) else None
}

我能做什么,但不是很酷...... 有什么技巧我不知道要实现第一种情况吗?

(只是为了澄清这个例子是一个简化,我没有找到识别int的方法)

1 个答案:

答案 0 :(得分:3)

尝试类似这种类型的模式匹配,

(1: Any) match {
  case v: Int => println(s"$v is an int")
  case ______ => println("not an int")
}