Answers:
恕我直言,这取决于上下文,有时它们是同义词,有时则不是。例如,在C#中,您具有数据类型“ IEnumerable”,该数据类型对迭代器进行了分类,但是您还具有“ enum”声明,该声明用于符号常量,而不是专门用于迭代。在其他编程语言(或其他上下文)中,情况可能相似还是不同。
如果您将两个单词当作英语动词,而不是专门作为编程语言的关键字来表达,那么
而且由于枚举需要进行迭代,并且枚举意味着某种迭代,因此通常可以互换这两个过程描述。
就像其他人所说的那样,精确的语义取决于使用这些术语的编程语言,因此我将进行纯粹的语言评估。
“可迭代”是一个新词,显然是指许多语言内置的“迭代”和“迭代器”。因此,此类类型几乎肯定支持迭代器,但不一定支持任何其他迭代器,也不一定支持除此以外的任何迭代器。最基本的迭代器功能:每个项目处理一次。可能支持或可能不支持反转,删除,测量距离等。
“可枚举”是指列举的事情,这可能意味着相同的迭代,但前提是语言还没有使用“迭代”为了这个目的。如果一种语言兼有,那么“无数”几乎可以肯定意味着其他东西,可能更强大。它很可能支持将每个元素与唯一的数字索引相连的概念,并且可能允许随机访问(例如,在第一个和第二个元素之前检索第三个元素)。
这就是您可以从单词中合理推断出的所有含义。在任何具体情况下,请参考标准库API文档。
我想集中讨论两个术语的严格定义
Iterable
就是迭代事物,并一一访问元素。
我认为该术语Enumerable
起源于车床。这是关于以正确顺序逐一列出元素的能力。事物可以一一列出countable
,每个都有唯一的对应索引。给定一个元素,您可以获得唯一索引。给定一个索引,您只能找到一个与该索引关联的可能元素。
换句话说,Enumerable
意味着生成元素的能力。例如,某些编程语言Haskell
已经实现了这一想法。有一个Enum类型的类,并且Char
是一个实例。
Prelude> fromEnum True
1
Prelude> fromEnum False
0
Prelude> toEnum 1 :: Bool
True
Prelude> fromEnum 'a'
97
Prelude> enumFromTo 'a' (toEnum 122 :: Char)
"abcdefghijklmnopqrstuvwxyz"