为什么我不能将递归函数定义为变量?我似乎能够定义任意函数,除非它们递归。
这是合法的:
func f(i int) int {
if i == 0 {
return 1
}
return i * f(i-1)
}
func main() {
fmt.Println(f(2))
}
这是非法的:
var f func(int) int = func(i int) int {
if i == 0 {
return 1
}
return i * f(i-1)
}
func main() {
fmt.Println(f(2))
}
这是合法的,我猜这只是因为您可以在初始化后计算出 f :
func main() {
var f *func(int) int;
t := func(i int) int {
if i == 0 {
return 1
}
return i * (*f)(i-1)
}
f = &t
fmt.Println((*f)(2))
}
所以看起来它归结为函数类型的函数和变量声明被区别对待,尽管从阅读文档中我不希望是这种情况。我是否错过了详细说明这一点的文档部分?
我希望非法案例能够工作,因为它适用于其他语言。就像在 JavaScript 中一样:
(function () {
var f = function (i) {
if (i == 0) {
return 1;
}
return i * f(i - 1);
};
console.log(f(2));
})();
ITMISS
相关分类