【问题标题】:About recursive enumeration in Swift关于 Swift 中的递归枚举
【发布时间】:2015-08-04 07:52:49
【问题描述】:

我通过阅读 Apple 的书快速编程语言来学习 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)
}

我有三个问题:

第一季度。 indirect 关键字的原因和用途是什么?

第二季度。如果把indirect放在enum前面,是不是表示firstcase之后的所有case都是firstcase的递归case?

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

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

【问题讨论】:

标签: swift swift2


【解决方案1】:

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

如果您在enum 之前写indirectcases 与编译器无关。如果您有很多必须标记为indirect 的案例,则可以使用前一个。所以它是一个更短的符号,编译器会计算出放置关键字的位置。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    相关资源
    最近更新 更多