为什么 Kotlin 中 hasNext()、next() 和 iterator() 的 'operator' 关键字是可选的?

Why is the 'operator' keyword optional on hasNext(), next() and iterator() in Kotlin?

我正在构建自己的集合,当我实现 Iterable 时,我意识到我忘记将 operator 关键字放在我集合中的 iterator() 方法上,还有我的 Iterator 中有两种方法 hasNext()next()。无论是否使用 operator 关键字,代码仍然可以正常工作。现在,我明白为什么这些方法是运算符方法了。我只想知道为什么他们选择使它成为一个运算符方法,然后不强制用户使用它旁边的 operator 关键字。

当您重写一个函数或属性时,它会隐式继承超类型的关键字,除非您使用与其相矛盾的关键字。例外是 override,必须始终显式使用。

根据 Tenfour04 的回答和我自己的发现,我意识到我没有被迫使用 operator 关键字的原因是因为我继承了 Kotlin 的 IterableIterator。并且这些接口已经包含方法iterator()hasNext()next(),方法旁边有关键字operator。作为 Kotlin Docs 状态:

When overriding your operator overloads, you can omit operator.

而且,这些方法之所以要求你使用operator关键字,是因为你没有被强制继承自IterableIterator。在 Kotlin 中,欢迎您创建自己的自定义 CustomIterableCustomIterator,其中您 被迫使用 operator 关键字如果你想使用 foreach 循环的方法。但是,不从 Iterable 继承意味着您将无法使用 Kotlin 的任何有用的集合操作方法,例如 .forEach { … }.map { … }.filter { … }