Scala:模式匹配选项[类[_]]

时间:2018-02-07 21:42:23

标签: scala pattern-matching

当然,有一种更简洁的方式来打开类型选项而不是:

// Return an object of the given class type:
def badFactory( clazz: Option[Class[_]]): AnyRef = {
    clazz match {
      case Some(foo) if foo == classOf[Foo] => new Foo()

      case Some(bar) if bar == classOf[Bar] => new Bar()
    }
  }

注意:如果clazz是1)没有或者2)有些但是Foo和Bar都没有,我希望它会抛出。

1 个答案:

答案 0 :(得分:3)

不是真的。如果你事先将它们放入val s(名称必须以大写字母开头),你可以拥有

val FooClass = classOf[Foo]
val BarClass = classOf[Bar]
// Return an object of the given class type:
def badFactory( clazz: Option[Class[_]]): AnyRef = {
    clazz match {
      case Some(FooClass) => new Foo()
      case Some(BarClass) => new Bar()
      case _ => ...
    }
  }

或者避免重复Some

// Return an object of the given class type:
def badFactory( clazz: Option[Class[_]]): AnyRef = {
    clazz match {
      case Some(clazz2) => 
        if (clazz2 == classOf[Foo])
          new Foo()
        else if (clazz2 == classOf[Bar])
          new Bar()
        else ...
      case None => ...
    }
  }