我正在通过阅读Apple的书快速编程语言来快速学习,我对递归枚举有一些疑问。 (我已经读过关于它的书,但不太明白)。
示例代码:
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
关键字的目的是什么?
Q2。如果将indirect
放在enum
前面,是否意味着第一个案例之后的所有案例都是第一个案例的递归案例?
Q3。实际上,上面的示例代码和下面的示例代码(没有indirect
关键字)有什么不同:
enum ArithmeticExpression {
case Number(Int)
case Addition(ArithmeticExpression, ArithmeticExpression)
case Multiplication(ArithmeticExpression, ArithmeticExpression)
}
答案 0 :(得分:1)
15/08/05 11:19:56 WARN TaskSetManager: Stage 519 contains a task of very large size (226 KB). The maximum recommended task size is 100 KB.
关键字用于告诉编译器,这个indirect
是递归的,它必须间接处理它(比如类),因为值类型通常具有固定的内存占用。
如果在enum
之前写indirect
或者enum
与编译器无关。如果您有很多必须标记为cases
的案例,则可以使用前者。因此它是一个较短的符号,编译器会指出放置关键字的位置。
由于我之前提到的固定内存占用,你的最后一个例子甚至无法编译。