Erlang中文手册(Erldoc.com)  »  array  »  reset/2
Erlang并发编程 Erlang/OTP设计原理 Erlang/OTP[pdf] Mnesia用户手册[pdf] Erlang完整手册[en] 官网手册[en] 模块列表 方法列表 随机 Erlang中文社区(BBS) 美女图库

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).
阿里云 - 最高1000元通用代金券立即可用
沪ICP备13037221号-9