The book says that "functions and closures are reference types".那么,如何确定引用是否相等? ==和===不起作用。

func a() { }
let å = a
let b = å === å // Could not find an overload for === that accepts the supplied arguments


以下是特特瓦人的处理方式:

MultiClosures & Equatable Closures

tests

最佳答案

克里斯·拉特纳(Chris Lattner)在开发人员论坛上写道:


  这是我们有意不想支持的功能。有
  会导致指针功能相等的各种事情(在
  快速类型的系统含义,其中包括几种闭包)
  失败或更改取决于优化。如果在上定义了“ ===”
  函数,编译器将不允许合并相同的方法
  身体,分享暴徒,并在
  关闭。此外,这种平等将是极端的
  在某些泛型上下文中令人惊讶,您可以在其中获得抽象
  将功能的实际签名调整为一个的thunk
  功能类型期望。


https://devforums.apple.com/message/1035180#1035180

这意味着您甚至不应该尝试比较闭包是否相等,因为优化可能会影响结果。

关于closures - 您如何测试函数和闭包是否相等?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54016256/

10-14 22:52