为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 函数和函数变量语义

Golang 函数和函数变量语义

Go
冉冉说 2021-09-13 17:03:10
为什么我不能将递归函数定义为变量?我似乎能够定义任意函数,除非它们递归。这是合法的: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));})();
查看完整描述

1 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

下面的代码将是执行您所描述的操作的首选方式。请注意,您不必创建额外的变量,也没有指向函数的指针:


package main


import "fmt"


func main() {

    var f func(int) int

    f = func(i int) int {

        if i == 0 {

            return 1

        }

        return i * f(i-1)

    }

    fmt.Println(f(2))

}


查看完整回答
反对 回复 2021-09-13
  • 1 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信