Scala:在给定 "path" 的类型上进行模式匹配?
Scala: pattern matching on a type with a given "path"?
假设我有:
object myObject{
class myClass1(){
class myClass11(){
class myClass111
}
class myClass12(){
class myClass121
}
}
}
class myClass{
class myClass2(){
object myObj21
object myObj22
}
}
我想对上面介绍的类型和对象进行模式匹配并获取实例:
仅 myClass1
(对象内的嵌套类型)
myClass11
和 myClass12
(aObject/aClass
中的双重嵌套类型)
仅 myClass2
(class 中的嵌套类型)
myObj21
, myObj22
而已。 (aClass/aClass
中的双重嵌套类型)
myClass111
,myClass121
。 (不同分支中的嵌套类型但嵌套级别相同且相同"root")
即。 object/class 和相同级别类型或相同子级别类型的不同变体。
我可以使用 "regex" 等效类型而不是明确拼写类型路径吗?
不,没有好的方法可以做到这一点。嵌套类型的模式匹配完全是不确定的,更不用说关于它们的复杂匹配了。
您也许可以编写一些自定义的 unapply 来使用反射或什至是宏来执行此类操作。但是想想那个兔子洞让我想知道为什么这首先是必要的。也许你可以添加一些特征来代表你关心的实际行为,并在这些特征上进行模式匹配?
假设我有:
object myObject{
class myClass1(){
class myClass11(){
class myClass111
}
class myClass12(){
class myClass121
}
}
}
class myClass{
class myClass2(){
object myObj21
object myObj22
}
}
我想对上面介绍的类型和对象进行模式匹配并获取实例:
-
仅
myClass1
(对象内的嵌套类型)myClass11
和myClass12
(aObject/aClass
中的双重嵌套类型)
仅 myClass2
(class 中的嵌套类型)myObj21
,myObj22
而已。 (aClass/aClass
中的双重嵌套类型)myClass111
,myClass121
。 (不同分支中的嵌套类型但嵌套级别相同且相同"root")
即。 object/class 和相同级别类型或相同子级别类型的不同变体。
我可以使用 "regex" 等效类型而不是明确拼写类型路径吗?
不,没有好的方法可以做到这一点。嵌套类型的模式匹配完全是不确定的,更不用说关于它们的复杂匹配了。
您也许可以编写一些自定义的 unapply 来使用反射或什至是宏来执行此类操作。但是想想那个兔子洞让我想知道为什么这首先是必要的。也许你可以添加一些特征来代表你关心的实际行为,并在这些特征上进行模式匹配?