查看源代码 元组 (Elixir v1.16.2)
用于处理元组的函数。
请注意,以下用于元组的函数位于 Kernel
中
elem/2
- 通过索引访问元组put_elem/3
- 通过索引将值插入元组tuple_size/1
- 获取元组中的元素数量
元组旨在用作多个元素的固定大小容器。要操作元素集合,请使用列表。 Enum
函数不适用于元组。
元组用花括号表示
iex> {}
{}
iex> {1, :two, "three"}
{1, :two, "three"}
元组可以包含不同类型的元素,这些元素在内存中连续存储。访问任何元素都可以在恒定时间内完成,但修改元组(这会产生一个浅拷贝)需要线性时间。元组适合读取数据,而列表更适合遍历。
元组通常用于函数具有多个返回值或用于错误处理的情况。 File.read/1
在成功读取给定文件时返回 {:ok, contents}
,否则返回 {:error, reason}
,例如当文件不存在时。
此模块中用于向元组添加和删除元素的函数在实践中很少使用,因为它们通常意味着元组被用作集合。要追加到元组,最好使用模式匹配从旧元组中提取元素,然后创建一个新元组
tuple = {:ok, :example}
# Avoid
result = Tuple.insert_at(tuple, 2, %{})
# Prefer
{:ok, atom} = tuple
result = {:ok, atom, %{}}
摘要
函数
在元组末尾插入一个元素。
返回一个新的元组,其中在末尾追加了元素,并且包含 tuple
中的元素,最后是 value
作为最后一个元素。
由编译器内联。
示例
iex> tuple = {:foo, :bar}
iex> Tuple.append(tuple, :baz)
{:foo, :bar, :baz}
@spec delete_at(tuple(), non_neg_integer()) :: tuple()
从元组中删除一个元素。
从 tuple
中删除给定 index
处的元素。如果 index
为负数或大于或等于 tuple
的长度,则引发 ArgumentError
。索引从零开始。
由编译器内联。
示例
iex> tuple = {:foo, :bar, :baz}
iex> Tuple.delete_at(tuple, 0)
{:bar, :baz}
@spec duplicate(term(), non_neg_integer()) :: tuple()
创建一个新的元组。
创建一个包含 size
个元素的元组,每个位置都包含给定的 data
。
由编译器内联。
示例
iex> Tuple.duplicate(:hello, 3)
{:hello, :hello, :hello}
@spec insert_at(tuple(), non_neg_integer(), term()) :: tuple()
将元素插入元组中。
将 value
插入到给定 index
处的 tuple
中。如果 index
为负数或大于 tuple
的长度,则引发 ArgumentError
。索引从零开始。
由编译器内联。
示例
iex> tuple = {:bar, :baz}
iex> Tuple.insert_at(tuple, 0, :foo)
{:foo, :bar, :baz}
iex> Tuple.insert_at(tuple, 2, :bong)
{:bar, :baz, :bong}
计算元组元素的乘积。
示例
iex> Tuple.product({255, 255})
65025
iex> Tuple.product({255, 1.0})
255.0
iex> Tuple.product({})
1
计算元组元素的总和。
示例
iex> Tuple.sum({255, 255})
510
iex> Tuple.sum({255, 0.0})
255.0
iex> Tuple.sum({})
0
将元组转换为列表。
返回一个新的列表,其中包含所有元组元素。
由编译器内联。
示例
iex> tuple = {:foo, :bar, :baz}
iex> Tuple.to_list(tuple)
[:foo, :bar, :baz]