如何在Scala中表示给定类型的所有值

时间:2016-01-27 16:25:33

标签: scala

我尝试设计一个特性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中反思。有什么想法改进吗?有没有更好的方法来实现这一目标?

[更新]我应该在这种情况下使用ClassTagTypeTag

0 个答案:

没有答案