gpt4 book ai didi

swift - 关于 Swift 中的递归枚举

转载 作者:行者123 更新时间:2023-11-30 10:13:10 26 4
gpt4 key购买 nike

我正在通过阅读Apple的书Swift编程语言来学习swift,我有一些关于递归枚举的问题。 (我读过这方面的书,但不太明白)。

示例代码:

    enum ArithmeticExpression {
case Number(Int)
indirect case Addition(ArithmeticExpression, ArithmeticExpression)
indirect case Multiplication(ArithmeticExpression, ArithmeticExpression)
}

据说可以更改为:

indirect enum ArithmeticExpression {
case Number(Int)
case Addition(ArithmeticExpression, ArithmeticExpression)
case Multiplication(ArithmeticExpression, ArithmeticExpression)
}

我有三个问题:

Q1。 indirect 关键字的原因和用途是什么?

第二季度。如果将indirect放在enum前面,是否意味着first case之后的所有case都是第一个case的递归case?

第三季度。实际上,上面的示例代码和下面的示例代码(没有 indirect 关键字)有什么不同:

enum ArithmeticExpression {
case Number(Int)
case Addition(ArithmeticExpression, ArithmeticExpression)
case Multiplication(ArithmeticExpression, ArithmeticExpression)
}

最佳答案

indirect 关键字用于告诉编译器,此enum 是递归的,并且必须间接对待它(像类一样),因为值类型通常具有一个固定内存占用。

如果您在enum之前编写indirect,或者cases与编译器无关。如果您有很多必须标记为间接的情况,则可以使用前一种。所以它是一个更短的符号,编译器会计算出将关键字放在哪里。

由于我之前提到的固定内存占用,您的最后一个示例甚至无法编译。

关于swift - 关于 Swift 中的递归枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31803622/

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