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]
创建稳定的标识符,这将简化模式匹配本身(尽管总体而言,它不会比您目前拥有的有太多改进)