我理解indirect
的作用。我不明白的是为什么需要这个关键字。编译器是否有足够的信息来自行解决这个问题?
enum Foo {
case Bar(Foo)
}
上面的代码不会被编译,除非它被标记为indirect
,但编译器已经可以检测到它是间接的,因为它再次使用相同的类型。即使我们做了一些更复杂的事情,它也应该能够解决这个问题。
enum Foo {
case Bar(Baz)
}
enum Baz {
case Bob(Foo)
}
即使在这里,编译器也有足够的信息知道Foo
和Baz
是递归的。例如,Haskell对于类似的递归类型不需要这样的关键字,所以显然可以在编译器中构建这样的东西。
同样,为什么我们需要indirect
关键字?
答案 0 :(得分:-1)
Swift不会想要来解决这个问题。它希望被明确告知,因此您确定您编写的代码是您要编写的代码。