假设您在Swift 3中有两个类型为
(Int)->()
的闭包,并测试以查看它们是否相同:
假设您在Swift 3中有两个类型为(Int)->()
的闭包,并测试它们是否相同:
typealias Baz = (Int)->()
let closure1:Baz = { print("foo \($0)") }
let closure2:Baz = { print("bar \($0)") }
if(closure1 == closure2) {
print("equal")
}
这段代码无法编译通过,并显示以下信息:
二元运算符“==”不能应用于两个类型为“(Int)->()”的操作数
好的,那么我们如何比较两个相同类型的闭包以确定它们是否相同呢?
func sayHi() { print("hi") }
时,你期望{ print("hi") } == { sayHi() }
为true
?那么如果捕获的变量不是Equatable
类型呢?我不知道有什么明智的方法可以确定两个闭包之间的相等性。 - Hamishprint
,另一个调用sayHi
。在-Onone build中,这些闭包将不包含相同的指令,但它们总是做相同的事情。此外,优化级别会影响您获得的结果(使用内联、专门化等)。正如JeremyP所说,通过“它们总是做相同的事情”来确定相等性需要解决停机问题的方案。 - Hamish