gpt4 book ai didi

recursion - 使用 Swift 运算符定义避免无限递归?

转载 作者:行者123 更新时间:2023-11-28 13:21:52 24 4
gpt4 key购买 nike

我在这里跟随井字游戏快速教程: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 是否相等?

最佳答案

你可以使用开关

switch left {
case .None: return false
default: break
}

此外,如果 both left,您的实现返回 false 会崩溃或 rightnil

固定版本

@infix func == ( left: Player?, right: Player? ) -> Bool
{
var leftIsNil = false

switch left {
case .None: leftIsNil = true
default: break
}

var rightIsNil = false

switch right {
case .None: rightIsNil = true
default: break
}

if leftIsNil || rightIsNil {
return leftIsNil == rightIsNil // return true if both nil
}

return left!.kind == right!.kind // return true if both same kind
}

如果Kind?是平等的

@infix func == ( left: Player?, right: Player? ) -> Bool
{
return left?.kind == right?.kind
}

关于recursion - 使用 Swift 运算符定义避免无限递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24791477/

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