我尝试设计一个特性Condition
用于过滤目的,我需要一种方法来表示给定类型的所有值。
sealed trait Condition[+A]
case object All extends Condition[Nothing]
case class In[A](values : Set[A]) extends Condition[A]
def match_?[T](conditions: Set[Condition[T]])(v: Any)(implicit tag: ClassTag[T]) =
tag.runtimeClass.isAssignableFrom(v.getClass)
val allString : Set[Condition[String]] = Set(All)
val allTuples : Set[Condition[Tuple2[_, _]]] = Set(All)
println(match_?(allString)("toto")) // should return true
println(match_?(allString)(2)) // should return false
println(match_?(allTuples)("toto")) // should return false
println(match_?(allTuples)((1,2))) // should return true
我不习惯在Scala中反思。有什么想法改进吗?有没有更好的方法来实现这一目标?
[更新]我应该在这种情况下使用ClassTag
或TypeTag
。