我最近碰到一些代碼,看起來像下面傳來:如何將記錄存儲在erlang中,以及它們是如何變異的?
-record(my_rec, {f0, f1, f2...... f711}).
update_field({f0, Val}, R) -> R#my_rec{f0 = Val};
update_field({f1, Val}, R) -> R#my_rec{f1 = Val};
update_field({f2, Val}, R) -> R#my_rec{f2 = Val};
....
update_field({f711, Val}, R) -> R#my_rec{f711 = Val}.
generate_record_from_proplist(Props)->
lists:foldl(fun update_field/2, #my_rec{}, Props).
我的問題是關於什麼實際發生的記錄 - 可以說記錄了711場,我從proplist這樣產生了 - 因爲記錄是不可變的,所以至少在語義上,我們在foldr的每一步都會產生一個新的完整記錄 - 使得看起來像一個函數在參數長度上是線性的,然後變成實際上二次函數長度,因爲有更新對應於每個插入記錄的長度 - 我是否在這個假設中正確,或者編譯器是否足夠智能以保存我?
[Erlang是否以任何聰明的方式實現記錄的拷貝和修改?](http://stackoverflow.com/questions/7207895/does-erlang-implement-record-copy-and-modify-in -any-clever-way) – tkowal 2014-09-28 07:21:52