为什么 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 的 Iterable
和 Iterator
。并且这些接口已经包含方法iterator()
、hasNext()
和next()
,方法旁边有关键字operator
。作为 Kotlin Docs 状态:
When overriding your operator overloads, you can omit operator
.
而且,这些方法之所以要求你使用operator
关键字,是因为你没有被强制继承自Iterable
和Iterator
。在 Kotlin 中,欢迎您创建自己的自定义 CustomIterable
和 CustomIterator
,其中您 将 被迫使用 operator
关键字如果你想使用 foreach 循环的方法。但是,不从 Iterable
继承意味着您将无法使用 Kotlin 的任何有用的集合操作方法,例如 .forEach { … }
、.map { … }
、.filter { … }
等
我正在构建自己的集合,当我实现 Iterable
时,我意识到我忘记将 operator
关键字放在我集合中的 iterator()
方法上,还有我的 Iterator
中有两种方法 hasNext()
和 next()
。无论是否使用 operator
关键字,代码仍然可以正常工作。现在,我明白为什么这些方法是运算符方法了。我只想知道为什么他们选择使它成为一个运算符方法,然后不强制用户使用它旁边的 operator
关键字。
当您重写一个函数或属性时,它会隐式继承超类型的关键字,除非您使用与其相矛盾的关键字。例外是 override
,必须始终显式使用。
根据 Tenfour04 的回答和我自己的发现,我意识到我没有被迫使用 operator
关键字的原因是因为我继承了 Kotlin 的 Iterable
和 Iterator
。并且这些接口已经包含方法iterator()
、hasNext()
和next()
,方法旁边有关键字operator
。作为 Kotlin Docs 状态:
When overriding your operator overloads, you can omit
operator
.
而且,这些方法之所以要求你使用operator
关键字,是因为你没有被强制继承自Iterable
和Iterator
。在 Kotlin 中,欢迎您创建自己的自定义 CustomIterable
和 CustomIterator
,其中您 将 被迫使用 operator
关键字如果你想使用 foreach 循环的方法。但是,不从 Iterable
继承意味着您将无法使用 Kotlin 的任何有用的集合操作方法,例如 .forEach { … }
、.map { … }
、.filter { … }
等