kotlin编码约定,在使用infix functions 的部分中,说:
仅当功能在两个扮演相似角色的对象上起作用时,才将功能声明为infix。很好的例子:
and
,to
,zip
。坏示例:add
。如果将方法变为接收器对象,则不要将方法声明为infix。
我的第一个问题是:add
是一个不好的例子?
然后,在对基本类型的讨论中,它解释说,位运算符是"可以以infix形式称为命名的函数",并且给出了此示例(作为较大表达式的一部分(:
(1 shl 2)
对我来说,似乎三个Kotlin换档操作(shl
,shr
和ushr
(违反了编码约定。左右操作数根本没有扮演类似的角色。左操作数是原始的位模式,右操作数是要移动位模式的距离。
我在这里错过了什么吗?
add
(让我们选择MutableList
接口的add
(是一个不好的例子,因为它破坏了规则:
如果将方法变为接收器对象,则不要将方法声明为infix。
add
突变原始列表并返回Boolean
。
在Kotlin中,没有用于位操作的专用操作员。因此,为了方便地称它们为infix函数。
另一方面,整数添加具有专用的操作员+
。这就是为什么不需要将plus
(Int
的(功能变为fround的原因,即使它将是合适的候选人。