代码之家  ›  专栏  ›  技术社区  ›  tpdi

Scala:模式匹配选项[类[\u]]

  •  1
  • tpdi  · 技术社区  · 6 年前

    当然,有一种比以下更简洁的方式来切换类类型选项:

    // 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)None或2)Some,但既不是Foo也不是Bar,我希望它会抛出。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Alexey Romanov    6 年前

    不是真的。如果你把它们放进 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 => ...
        }
      }