为什么递归Swift枚举中需要间接关键字?

时间:2016-02-03 19:05:08

标签: swift

我理解indirect的作用。我不明白的是为什么需要这个关键字。编译器是否有足够的信息来自行解决这个问题?

enum Foo {
    case Bar(Foo)
}

上面的代码不会被编译,除非它被标记为indirect,但编译器已经可以检测到它是间接的,因为它再次使用相同的类型。即使我们做了一些更复杂的事情,它也应该能够解决这个问题。

enum Foo {
    case Bar(Baz)
}

enum Baz {
    case Bob(Foo)
}

即使在这里,编译器也有足够的信息知道FooBaz是递归的。例如,Haskell对于类似的递归类型不需要这样的关键字,所以显然可以在编译器中构建这样的东西。

同样,为什么我们需要indirect关键字?

1 个答案:

答案 0 :(得分:-1)

Swift不会想要来解决这个问题。它希望被明确告知,因此您确定您编写的代码是您要编写的代码。