【发布时间】:2014-07-16 21:54:48
【问题描述】:
我在这里跟随一个井字游戏快速教程:https://www.youtube.com/watch?v=LkYpoRj-7hA。
随着我的进步,我一直在对代码进行更改,例如创建结构和枚举以更好地构建代码中的实体。我想为两个名为“Player”的可选结构创建一个相等运算符。如果任一参数为 nil 或它们的“种类”字段不相等(种类是枚举),则此运算符将返回 false。这是我为此编写的代码:
1. @infix func == ( left: Player?, right: Player? ) -> Bool
2. {
3. var isEqual = false
4.
5. if( left? == nil || right? == nil )
6. {
7. isEqual = false
8. }
9.
10. if( left!.kind == right!.kind )
11. {
12. isEqual = true
13. }
14.
15. return isEqual
16. }
问题是我相信当我检查 nil(第 5 行)时,它会被自己递归调用。它在运行时崩溃,调用堆栈一遍又一遍地列出这个函数。
问题:我认为这会触发无限递归的假设是否正确?如果是这样,这是 Swift 中的一个错误,还是它应该如何工作?有没有办法在函数不调用自身的情况下检查与 nil 的相等性?
【问题讨论】:
标签: recursion swift operator-overloading infinite-loop