当前位置 : 主页 > 手机开发 > 其它 >

swift – 实现|| =和\u0026\u0026 =运算符:不匹配运算符声明的运算符实现

来源:互联网 收集:自由互联 发布时间:2021-06-11
我想要“分配或”和“分配和”操作符.根据 Swift Standard Library Operators Reference,这些运算符在标准库中定义. 我试图为Bool值实现这些运算符: func ||= (inout lhs: Bool, rhs: Bool) { lhs = lhs || rhs
我想要“分配或”和“分配和”操作符.根据 Swift Standard Library Operators Reference,这些运算符在标准库中定义.

我试图为Bool值实现这些运算符:

func ||= (inout lhs: Bool, rhs: Bool) {
  lhs = lhs || rhs
}

func &&= (inout lhs: Bool, rhs: Bool) {
  lhs = lhs && rhs
}

但编译器抱怨:运算符实现没有匹配运算符声明

这可以通过定义运算符来修复:

infix operator ||= { associativity right precedence 90 }

infix operator &&= { associativity right precedence 90 }

但我不确定这是正确的做法.为什么标准库中的定义不起作用?另外,我注意到根据操作符参考标准库,没有针对任何类型的这些运算符的实现.这是为什么?这是疏忽还是故意的?

有关操作符的文件已经过时,之前在 this answer的评论中已经提到过;我引用用户Airspeed Velocity:

Yup, checked and it (ed. note: referring to operator &&=) was only
ever defined as an operator in very in early versions, and never
actually implemented in any function, then removed altogether later.
Docs are wrong.

您可以通过Cmd单击Swift来轻松查看实际定义的运算符

import Swift

在例如一个操场.

或者,查看Policy.swift源代码中的标准运算符部分:

> swift/stdlib/public/core/Policy.swift

在上述两个中,很明显,&& =和|| =都不是本地定义的.

如果您对这些运算符的实现方式感兴趣(回到Swift 1.1),可能会对以下帖子感兴趣:

> Implementing Ruby’s ||= operator in Swift using @autoclosure

网友评论