Swift没有转发函数声明的机制(据我所知),所以我想知道如何定义简单的共同递归函数。例如,绘制Dragon Curve的简单方案可以使用以下共同递归函数file_field(:post, :image, accept: 'image/png,image/gif,image/jpeg')
和X
:
Y
我想我可以使用协议以某种方式取消它。但是,如果没有前向声明或Swift中不完整的类型,你如何解决这个鸡蛋问题?
编辑:上面的代码没问题,但是如果您移动底部调用func dragon(levels : Int) {
func X(_ d : Int) { // call's Y()
if d > 0 {
X(d - 1)
turn(90)
Y(d - 1)
drawForward()
turn(90)
}
}
func Y(_ d : Int) { // calls X()
if d > 0 {
turn(-90)
drawForward()
X(d - 1)
turn(-90)
Y(d - 1)
}
}
drawForward() // put these two statements above the definition
X(levels) // of 'X' and you get "use of 'X' before definition
} // error."
,那么
它发生在X(levels)
的定义之前,你得到错误“使用
声明之前的局部变量'X'。这看起来很奇怪
因为您定义的是X
而dragon
实际上并不存在
直到稍后调用(实际调用X(levels)
时)。