我希望创建一个不需要提取值的模式匹配器,并且没有找到一种非常令人满意的方法。假设我有以下 说明性 示例:
我希望匹配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的方法)
答案 0 :(得分:3)
尝试类似这种类型的模式匹配,
(1: Any) match {
case v: Int => println(s"$v is an int")
case ______ => println("not an int")
}