为什么 Swift 中的运算符重载没有在它所属的类型中声明?

问题描述 投票:0回答:2

为什么 Swift 中的运算符重载不在它所属的类型中声明(就像在 C++ 中一样),而是在全局范围内声明?

swift operator-overloading
2个回答
4
投票

旁注:这真的很重要吗? 原来如此。

运算符不在类型内部声明,因为它们与全局函数更相似或内联。类方法和结构函数通常修改查询被调用的实体。

从这个意义上说,

let x = a + b
更类似于写作
let x = add(a, b)
,而不是
let x = a.add(b)
,因为后者会让你相信你正在修改接收器(这不是真的)。

有人可能会说你正在查询它,实际上是在问:“A,如果你要被添加到 B,结果会是什么”但这不是考虑对象/类型交互的自然方式。

归根结底,这是一个设计决定。


0
投票

Swift 中的运算符可以在类型内部重载

根据 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

下的文档中找到
© www.soinside.com 2019 - 2024. All rights reserved.