Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala使用反射进行模式匹配的正确方法_Scala_Pattern Matching - Fatal编程技术网

scala使用反射进行模式匹配的正确方法

scala使用反射进行模式匹配的正确方法,scala,pattern-matching,Scala,Pattern Matching,尝试重构并改进此模式匹配: abstract class SuperClass case class Foo() extends SuperClass case class Bar() extends SuperClass def getTheClass(param:String)={ Class.forName(param) } val bazz = getTheClass(classOf[Foo].getName) bazz match{ case b if b == class

尝试重构并改进此模式匹配:

abstract class SuperClass
case class Foo() extends SuperClass
case class Bar() extends SuperClass

def getTheClass(param:String)={
 Class.forName(param)
}

val bazz = getTheClass(classOf[Foo].getName)

bazz match{
  case b if b == classOf[Bar] => "I am Bar"
  case f if f == classOf[Foo] => "I am Foo"
}

有没有不带防护装置的优雅方式?

完全基于字符串匹配:

abstract class SuperClass
case class Foo() extends SuperClass
case class Bar() extends SuperClass

val FooClass = classOf[Foo].getName
val BarClass = classOf[Bar].getName

val bazz = classOf[Foo].getName

bazz match{
  case BarClass => "I am Bar"
  case FooClass => "I am Foo"
}

你真的需要从字符串构造bazz吗?可能是@PaoloFalabella的重复。它不是重复的,虽然有匹配,但我要求的是不同的solution@om-nom nom yes,否则将使用其他匹配:)@igx你是对的,它严格来说不是重复的(我收回了我的“接近”投票),尽管被接受的答案同样适用于您:您可以为
classOf[Bar]
classOf[Foo]
创建稳定的标识符,这将简化模式匹配本身(尽管总体而言,它不会比您目前拥有的有太多改进)