这是我的问题:如果某些谓词适用,我有大量对象要在其上应用程序(我称之为“编译器”)。为清楚起见,我想将谓词函数与过程分开;但是在许多情况下,谓词可能非常复杂,并且构建了我想在后面的过程函数中重用的信息。
我定义一个编译器如下:
trait Compiler[A] {
def mtch(o: SourceObject): Option[A]
def proceed(o: SourceObject, data: A): Unit
}
以及如何调用编译器:
val compilers: Seq[Compiler[_]]
val objects: Seq[SourceObject]
for (o <- objects; c <- compilers; data <- c.mtch(o)) {
c.proceed(o, data)
}
也就是说,如果mtch
函数返回Some(data)
,则proceed
调用该方法,并data
附加。但是,我无法编译它,因为我在管理编译器时不知道数据的类型。
此外,我有一些我实际上不需要任何数据的情况。在我目前的状态下,我有匹配器 return Some(null)
,它很臭。