販売注文を表すクラスがあります。
class SalesOrder(val f01:String, val f02:Int, ..., f50:Date)
fXX
フィールドにはさまざまな種類があります。注文の監査証跡を作成するという問題に直面しています。クラスの 2 つのインスタンスが与えられた場合、どのフィールドが変更されたかを判断する必要があります。私は次のことを思いつきました:
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 インスタンスを使用するため、大量のガベージが作成される可能性があることです。別のアプローチを使用する必要がありますか?