【发布时间】:2014-09-28 06:30:29
【问题描述】:
我最近遇到了一些类似于以下内容的代码:
-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 中的每一步 - 使看起来像参数长度呈线性的函数变为长度实际上是二次的函数,因为每个插入的记录长度都有对应的更新 - 我是否正确在这个假设下,或者编译器是否足够智能 救我?
【问题讨论】:
标签: optimization erlang