> Erlang中文手册 > reset/2 把数组里某个指定项的值重置为默认值

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 
	    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).