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

Swift 实施| |=和&&;=运算符:不匹配运算符声明的运算符实现,swift,Swift,我想要“赋值或”和“赋值和”运算符。根据,这些运算符在标准库中定义 我尝试为Bool值实现这些运算符: func ||= (inout lhs: Bool, rhs: Bool) { lhs = lhs || rhs } func &&= (inout lhs: Bool, rhs: Bool) { lhs = lhs && rhs } 但是编译器抱怨:运算符实现没有匹配的运算符声明 这可以通过定义运算符来解决: infix operator ||=

我想要“赋值或”和“赋值和”运算符。根据,这些运算符在标准库中定义

我尝试为
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 }

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

关于操作员的文件已经过时,这已在之前的评论中指出;我引用用户空速:

是的,选中了,它(编辑注:指操作员
&&=
)仅为 在早期版本中曾定义为运算符,但从未 实际上是在任何函数中实现的,然后在以后完全删除。 医生错了

通过在中单击
Cmd
,您可以很容易地看到哪些运算符实际上是本机定义的

import Swift
例如在操场上

或者,查看
策略的源代码中的标准运算符部分。swift

在上述两种情况下,显然
&&=
|124;=
都不是本机定义的


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


很有趣。但是您的实现对我来说似乎没问题。@J.Wang是的,它似乎工作得很好,但我想知道重新实现这些操作符是否是正确的选择do@dfri啊,我明白了,谢谢!你能把这个作为答案吗?嗯,这种操作符对你的代码质量不好。事实上,您需要它们意味着您更喜欢使用可变变量而不是常量。