首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现||=和&&=操作符:不匹配操作符声明的操作符实现

实现||=和&&=操作符:不匹配操作符声明的操作符实现
EN

Stack Overflow用户
提问于 2016-03-03 10:01:16
回答 1查看 2.6K关注 0票数 4

我希望有“分配或”和“分配和”操作符。根据标准图书馆操作人员参考资料,这些操作符是在标准库中定义的。

我尝试为Bool值实现这些操作符:

代码语言:javascript
复制
func ||= (inout lhs: Bool, rhs: Bool) {
  lhs = lhs || rhs
}

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

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

这可以通过定义操作符来解决:

代码语言:javascript
复制
infix operator ||= { associativity right precedence 90 }

infix operator &&= { associativity right precedence 90 }

但我不认为这是正确的做法。为什么标准库中的定义不能工作?此外,我注意到,根据操作符引用标准库没有任何类型的这些操作符的实现。为什么会这样呢?这是疏忽还是故意的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-03 10:39:35

关于操作符的文档已经过时了,这一点在这个答案的评论中已经提到过;我引用用户空速速度:

是的,检查过了。注意:在早期版本中,只将操作符&&=定义为运算符,并且从未在任何函数中实际实现,然后在以后完全删除。医生们错了。

您可以很容易地看到哪些运算符实际上是由Cmd-clicking Swift

代码语言:javascript
复制
import Swift

在操场上。

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

在上述两种情况下,很明显,&&=||=都不是本机定义的。

如果您对这些操作符是如何实现的(回到Swift 1.1版)感兴趣的话,下面的帖子可能会引起您的兴趣:

  • 用@auto闭包在Swift中实现Ruby的||=运算符
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35768889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档