如何在Go中递归闭包?

20

如何在Go中递归一个闭包?

假设我有一个类似以下代码的闭包:

recur := func(){
    recur()
}

编译器提示:

未定义:recur

我应该如何实现它?为什么会发生这种情况?

1个回答

25

这是因为程序的计算顺序导致的

截至2015年12月(go.1.5.1),没有任何语言特性能够解决这个问题。

可能存在的解决办法:

var recur func()
recur = func(){
    recur()
}

//or

type recurF func(recurF)

recur := func(recur recurF) {
    recur(recur)
}

更多信息:https://github.com/golang/go/issues/226


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