实现|| =和&& =运算符:不匹配运算符声明的运算符实现

时间:2016-03-03 10:01:17

标签: swift

我想要"分配或"和"分配和"运营商。根据{{​​3}},这些运算符在标准库中定义。

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

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

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

但编译器抱怨:operator implementation without matching operator declaration

这可以通过定义运算符来解决:

infix operator ||= { associativity right precedence 90 }

infix operator &&= { associativity right precedence 90 }

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

1 个答案:

答案 0 :(得分:5)

关于运营商的文档已经过时,之前在this answer的评论中已经提到过;我引用用户Airspeed Velocity:

  

是的,检查过它( ed。注意:指的是运营商&&= )只是   曾经被定义为早期版本的运营商,而且从未   实际上在任何函数中实现,然后完全删除。   文档错了。

您可以通过Cmd - 点击{/ 1>}中的Swift轻松查看实际定义的运营商

import Swift

例如一个操场。

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

在上述两个方面,显而易见的是&&=||=都不是本地定义的。

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