gpt4 book ai didi

operator-overloading - 还不支持运算符重载?

转载 作者:IT王子 更新时间:2023-10-29 05:13:59 24 4
gpt4 key购买 nike

根据 Swift 编程指南,运算符重载是允许的,而且实际上用途广泛。但是,我一直无法让它在 Playground 上工作。

例如,Equatable 协议(protocol)需要这样:func ==(lhs:Self, rhs:Self) -> Bool

假设我制作了一个简单的 Location3D 结构:

struct Location3D
{
var x : Double
var y : Double
var z : Double
}

现在我希望这个 Location3D 实现 Equatable 协议(protocol),所以我将它与这个方法一起添加:

func ==(lhs: Self, rhs: Self) -> Bool
{
return lhs.x == rhs.x &&
lhs.y == rhs.y &&
lhs.z == rhs.z
}

我收到编译器错误operators are only allowed at global scope。嗯?

所以我尝试将 @infix 添加到函数中,将函数移动到扩展,将类型更改为类......所有这些都无济于事。

我错过了什么吗?当运算符似乎不起作用时,您应该如何实现 EqutableComparable

最佳答案

您需要在全局范围内覆盖 == 运算符,但使用您的参数类型。

在这种情况下,这意味着您声明您的结构以符合协议(protocol),然后只需在其范围之外实现该功能。

struct Location3D : Equatable {
// ...
}

func ==(lhs: Location3D, rhs: Location3D) -> Bool {
// ...
}

有关进一步讨论,请参阅库引用:

https://developer.apple.com/documentation/swift/equatable

关于operator-overloading - 还不支持运算符重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24148135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com