array:reset/2
把数组里某个指定项的值重置为默认值
用法:
reset(I :: array_indx(), Array :: array()) -> array()
内部实现:
-spec reset(I :: array_indx(), Array :: array()) -> array(). reset(I, #array{size = N, max = M, default = D, elements = E}=A) when is_integer(I), I >= 0 -> if I < N -> try A#array{elements = reset_1(I, E, D)} catch throw:default -> A end; M > 0 -> A; true -> erlang:error(badarg) end; reset(_I, _A) -> erlang:error(badarg). reset_1(I, E=?NODEPATTERN(S), D) -> I1 = I div S + 1, setelement(I1, E, reset_1(I rem S, element(I1, E), D)); reset_1(_I, E, _D) when is_integer(E) -> throw(default); reset_1(I, E, D) -> Indx = I+1, case element(Indx, E) of D -> throw(default); _ -> setelement(I+1, E, D) end.
把数组里第 I 个项的值重置为默认值,如果第 I 个项的值是默认值,则不作任何改变。重置操作不会改变数组的大小。如果想改变数组的大小,可以调用 array:resize/2 函数。
如果参数 I 不是一个非负整数,或者数组是一个固定大小的数组,参数 I 的值大于数组的最大索引值,那么将返回 bagarg 的调用失败原因。
Array = array:from_list(["a", "b", "c"], pink), array:reset(1, Array).