我有一个代表销售订单的类:
class SalesOrder(val f01:String, val f02:Int, ..., f50:Date)
字段有fXX
多种类型。我面临创建订单审计跟踪的问题。给定该类的两个实例,我必须确定哪些字段已更改。我想出了以下几点:
class SalesOrder(val f01:String, val f02:Int, ..., val f50:Date){
def auditDifferences(that:SalesOrder): List[String] = {
def diff[A](fieldName:String, getField: SalesOrder => A) =
if(getField(this) != getField(that)) Some(fieldName) else None
val diffList = diff("f01", _.f01) :: diff("f02", _.f02) :: ...
:: diff("f50", _.f50) :: Nil
diffList.flatten
}
}
我想知道编译器对所有_.fXX
函数做了什么:它们是否只实例化一次(静态),并且可以由我的类的所有实例共享,还是每次我创建我的类的实例时都会实例化它们?
我担心的是,由于我将使用大量 SalesOrder 实例,因此可能会产生大量垃圾。我应该使用不同的方法吗?