Swift枚举递归关联值

4

我正在尝试使用Swift中的枚举来创建数学表达式。 这个枚举可以是一个常量,其关联值是ComplexNumber类型(一个简单的结构体)。它也可以是一个平方根表达式,具有递归的关联值。 例如,我希望能够将sqrt(sqrt(1+2i))存储在一个枚举中。

enum Expression {
    case Sqrt(Expression)
    case Constant(ComplexNumber)
}

Xcode(6 beta 2)立即崩溃。问题出在哪里? 根据我在Swift指南中关于相关值的阅读,这应该可以工作。


3
还未实现。这是我得到的信息:错误: 未实现IR生成特性,递归枚举布局 - Christian Dietrich
3
Xcode不应崩溃。但我怀疑递归枚举是不可能的。枚举是值类型,带有相关值的枚举类似于C语言中的联合体。我认为它们必须在编译时知道一个已知的大小。 - Martin R
只是好奇,你为什么要对Expression枚举类型进行Sqrt()操作? - TheLazyChap
@TheLazyChap 我认为他们想要创建一个公式解释器或类似的东西,表达式本身就是一种计算,而sqrt也是一种计算。 - Kametrixom
可能是Swift(Beta 7)中递归枚举的奇怪行为的重复问题。 - mpolednik
1个回答

1
现在,在Swift 2.0 beta 4中是可能的。 例子来自发布说明:
 enum List<T> {
   case Nil
   indirect case Cons(head: T, tail: List<T>)
 }

 indirect enum Tree<T> {
   case Leaf(T)
   case Branch(left: Tree<T>, right: Tree<T>)
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接