Elixir语言中 Range 相关用法介绍如下。
范围表示零、一个或多个升序或降序整数的序列,具有称为步长的共同差异。
范围始终包含在内,并且可能具有自定义步骤。在范围上创建和匹配的最常见形式是通过   和 first..last   符号,auto-imported 来自 first..last//step   :Kernel 
iex> Enum.to_list(1..3)
[1, 2, 3]
iex> Enum.to_list(1..3//2)
[1, 3]
iex> Enum.to_list(3..1//-1)
[3, 2, 1]
范围也可以有一个元素:
iex> Enum.to_list(1..1)
[1]
iex> Enum.to_list(1..1//2)
[1]
甚至根本没有元素:
iex> Enum.to_list(10..0//1)
[]
iex> Enum.to_list(0..10//-1)
[]
当定义一个没有步长的范围时,步长将根据范围的第一个和最后一个位置来定义,如果是first >= last,它将是一个递增的范围,步长为1。否则,它是一个递减的范围。但请注意,不推荐使用隐式递减范围。因此,如果您需要从 3 到 1 的递减范围,最好改为编写 3..1//-1。
定义
递增范围 first..last//step 是从 first 到 last 增加 step 的范围,其中 step 必须是正整数,所有值 v 必须是 first <= v and v <= last 。因此,范围 10..0//1 是一个空范围,因为没有值 v 是 10 <= v and v <= 0 。
同样,递减范围 first..last//step 是从 first 到 last 递减 step 的范围,其中 step 必须是负整数,而值 v 必须是 first >= v and v >= last 。因此,范围 0..10//-1 是一个空范围,因为没有值 v 是 0 >= v and v >= 10 。
表示
在内部,范围表示为结构:
iex> range = 1..9//2
1..9//2
iex> first..last//step = range
iex> first
1
iex> last
9
iex> step
2
iex> range.step
2
您可以直接访问范围字段(first、last 和 step),但不应手动修改或创建范围。而是使用正确的运算符或   和 new/2   。new/3 
范围实现了  协议,这意味着Enumerable   模块中的函数可用于处理范围:Enum 
iex> range = 1..10
1..10
iex> Enum.reduce(range, 0, fn i, acc -> i * i + acc end)
385
iex> Enum.count(range)
10
iex> Enum.member?(range, 11)
false
iex> Enum.member?(range, 8)
true
无论范围大小如何,此类函数调用在内存方面都是有效的。   协议的实现使用仅基于端点的逻辑,并没有具体化整个整数列表。Enumerable 
相关用法
- Elixir Range.size用法及代码示例
 - Elixir Range.new用法及代码示例
 - Elixir Range.disjoint?用法及代码示例
 - Elixir Registry.count_match用法及代码示例
 - Elixir Registry.lookup用法及代码示例
 - Elixir Record.extract用法及代码示例
 - Elixir Registry.unregister_match用法及代码示例
 - Elixir Regex.run用法及代码示例
 - Elixir Regex.names用法及代码示例
 - Elixir Record.defrecord用法及代码示例
 - Elixir Registry.register用法及代码示例
 - Elixir Registry用法及代码示例
 - Elixir Registry.values用法及代码示例
 - Elixir Registry.put_meta用法及代码示例
 - Elixir Regex.named_captures用法及代码示例
 - Elixir Registry.keys用法及代码示例
 - Elixir Regex.match?用法及代码示例
 - Elixir Record用法及代码示例
 - Elixir Registry.start_link用法及代码示例
 - Elixir Registry.unregister用法及代码示例
 - Elixir Registry.delete_meta用法及代码示例
 - Elixir Registry.count用法及代码示例
 - Elixir Registry.meta用法及代码示例
 - Elixir Registry.select用法及代码示例
 - Elixir Registry.update_value用法及代码示例
 
注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Range。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
