在我目前的项目中,我需要定义很多case子对象,这些对象子类化了一个密封的trait。这些对象的名称具有模式,例如Case1,Case2,Case3,...,CaseN。我想知道scala中是否有方法以编程方式定义所有这些case对象,例如使用循环,而不是编写N行定义。
如果这是可行的,那么在编译时执行此操作也会很棒,以便以这种方式定义的case对象可以进行类型检查。在大多数语言中这听起来都是不可能的(你可以在python中使用动态定义的类型,或者像在C / C ++中那样具有静态类型安全性,但不能同时使用这两种类型),但是在Scala中它可以用于强大的编译时反射吗?
答案 0 :(得分:0)
我正在考虑这个解决方案:
trait customTrait{
val property: String
}
case class toMatch(property: String) extends customTrait{
}
val cases: Seq[toMatch] = for{
x <- 0 until 10
} yield toMatch("property" + x)
def matchCase(caseToMatch: customTrait): String = caseToMatch match{
case toMatch("property1") => "1"
case toMatch("property2") => "2"
case toMatch("property3") => "3"
case toMatch("property4") => "4"
case _ => "non"
}
for {
x <- cases
} yield matchCase(x)