gpt4 book ai didi

swift - 为什么重载 == 在 Swift 的全局范围内完成?

转载 作者:搜寻专家 更新时间:2023-11-01 05:59:23 25 4
gpt4 key购买 nike

我正在学习 Swift,我对为什么在全局范围内进行重载感到有点困惑。这段代码:

class Foo: Equatable {
var name = "Untitled"
}
func == (lhs: Foo, rhs: Foo) -> Bool {
return lhs.name == rhs.name
}

let value1 = Foo()
var value2 = Foo()
let firstCheck = value1 == value2

在我们正在比较的对象上声明一个 == 方法的 Ruby 背景感觉真的很奇怪:

class Foo
def == (otherFoo)
self.name == otherFoo.name
end
end

如果我在同一个文件中声明多个类会怎样?或者快速查看 lhs 的类型。和右手边。查看在哪里应用过载?

最佳答案

这是因为所有 运算符都在全局范围内(如果您想定义自己的运算符,则需要 declare it first ;另请参阅 the NSHipster article on operators )。运算符是特殊的,因为它具有优先级关联,这是普通方法所没有的。

现在您可以使它们成为像 Ruby 选择实现的对象的一部分,并在某处使用隐式规则。 Swift 设计者选择使(自定义)运算符成为可以重载的全局函数。我不知道他们的原因,但我想这让编译器的事情变得更容易和更一致(毕竟,Ruby 是解释的,而 Swift 是编译的并且想做尽可能多地优化编译时间)。

关于swift - 为什么重载 == 在 Swift 的全局范围内完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26632772/

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