Tuple(元组)

作为常数组

一直传说erlang没有数组。其实,tuple(元组) 就是数组(当然是常数组)。与数组相关的函数如下:

size(Tuple)
%% 取数组大小

erlang:append_element(Tuple1, Term) -> Tuple2
%% 添加一个元素

element(N, Tuple) -> Term
%% 取数组的第N个元素

erlang:make_tuple(N, InitialValue) -> Tuple
%% 创建一个数组元素值均为InitialValue的数组(该数组包含N个元素)。

setelement(Index, Tuple1, Value) -> Tuple2
%% 修改下标为Index的数组元素的值。

list_to_tuple(List) -> Tuple
%% 链表转数组

tuple_to_list(Tuple) -> List
%% 数组转链表

可以看出,Tuple数组相关的功能还是比较全的。

作为结构体

假设我们定义了一个结构体(记录)

-record(foo, {member1, member2, member3}}.

那么:

#foo{member1="hello", member3=13, member2={a, b, c}}

其实就是这样一个tuple:

{foo, "hello", {a, b, c}, 13}

而已。与结构体相关的函数有:

is_record(Term, RecordTag) -> bool()
%% 判断一个Erlang的Term是否结构体。这里RecordTag是结构体名。它等价于:
%% is_tuple(Term) and size(Term) =:= (结构体大小+1) and element(1, Term) =:= RecordTag。

更详细的内容,参阅结构体(记录)

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License