函數字面的我有一個類,它表示銷售訂單:分配在斯卡拉
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實例,它可能會產生大量垃圾。我應該使用不同的方法嗎?
您也可能會擔心在List中與陣列中創建'Some'對象或存儲字段更改。或者如果您必須爲'n'銷售訂單調用'diff'' n-1'次,您將如何重構審計跟蹤。如果您遇到性能問題,您現在編寫的方式將爲優化留下機會。 – huynhjl