为什么 Swift 中的运算符重载不在它所属的类型中声明(就像在 C++ 中一样),而是在全局范围内声明?
旁注:这真的很重要吗? 原来如此。
运算符不在类型内部声明,因为它们与全局函数更相似或内联。类方法和结构函数通常修改或查询被调用的实体。
从这个意义上说,
let x = a + b
更类似于写作let x = add(a, b)
,而不是let x = a.add(b)
,因为后者会让你相信你正在修改接收器(这不是真的)。
有人可能会说你正在查询它,实际上是在问:“A,如果你要被添加到 B,结果会是什么”但这不是考虑对象/类型交互的自然方式。
归根结底,这是一个设计决定。
根据 Swift 文档,下面是 Swift 中运算符重载的示例:
struct Vector2D {
var x = 0.0, y = 0.0
}
extension Vector2D {
static func + (left: Vector2D, right: Vector2D) -> Vector2D {
return Vector2D(x: left.x + right.x, y: left.y + right.y)
}
}
并且:
extension Vector2D {
static func += (left: inout Vector2D, right: Vector2D) {
left = left + right
}
}
我希望这有帮助。更多信息可以在advancedoperators
下的文档中找到