proplists:substitute_negations/2
替换列表里的键并对值取反
用法:
substitute_negations(Negations, List) -> List
内部实现:
-spec substitute_negations(Negations, ListIn) -> ListOut when Negations :: [{Key, Key}], Key :: term(), ListIn :: [term()], ListOut :: [term()]. substitute_negations(As, Props) -> [substitute_negations_1(As, P) || P <- Props]. substitute_negations_1([{Key, Key1} | As], P) -> if is_atom(P), P =:= Key -> property(Key1, false); tuple_size(P) >= 1, element(1, P) =:= Key -> case P of {_, true} -> property(Key1, false); {_, false} -> property(Key1, true); _ -> %% The property is supposed to be a boolean, so any %% other tuple is interpreted as 'false', as done in %% 'get_bool'. property(Key1, true) end; true -> substitute_negations_1(As, P) end; substitute_negations_1([], P) -> P.
替换列表里的键并对值取反。列表里的每一个条目,如果参数 Negations 是由 {K1, K2} 这种相关联的形式组成的列表,那么如果条目是 {K1, true} 的话,它将会被替换为 {K2, false},否则,它将会被替换为 {K2, true},即改变项的名字并对值的布尔属性(可由 proplists:get_bool/2 获得)取反。如果同样的 K1 不止一次出现在参数 Negations,那么只有只有第一个会被使用。
proplists:substitute_negations([{k1, a1}], [{k1, 1}, {k1, false}, {k2, 2}, {k1, true}, k1, {k4, 4}]).
proplists:substitute_negations([{k1, a1}, {k2, a2}], [{k1, 1}, {k1, false}, {k2, 2}, {k1, true}, k1, {k4, 4}]).