我想要“分配或”和“分配和”操作符.根据
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。