英文:
Return recursive anonymous functions in golang
问题
我想要能够在golang中返回一个递归的匿名函数。我已经使用了下面的代码片段。
在这里,foo()不起作用,因为匿名函数无法引用自身。
bar()按预期工作。
如果可能的话,应该如何正确实现这个功能呢?
package main
import (
"fmt"
)
func foo() func(int) int {
var f func(int) int
f = func(x int) int {
if x == 1 {
return 1
}
return x * f(x-1)
}
return f
}
func bar() func(int) int {
return func(x int) int {
return x * 100
}
}
func main() {
a := foo()
b := bar()
fmt.Println(a(5))
fmt.Println(b(5))
}
在foo()函数中,我们声明了一个变量f,它是一个函数类型。然后,我们将匿名函数赋值给f,并在匿名函数内部使用f来递归调用自身。这样,匿名函数就能够引用自身了。
英文:
I want to be able to return a recursive anonymous function in golang. I have used the code snippet below.
Here foo() doesn't work because the anonymous function has no way of referring to itself.
bar() works as expected.
What would be the right way of doing this, if at all possible?
package main
import (
"fmt"
)
func foo() func(int) int {
return func(x int) int {
if x == 1 {
return 1
}
return x * func(x-1) // this is where the problem lies
}
}
func bar() func(int) int {
return func(x int) int {
return x * 100
}
}
func main() {
a:= foo()
b:= bar()
fmt.Println(a(5))
fmt.Println(b(5))
}
答案1
得分: 6
你可以先声明 f
:
func foo() func(int) int {
var f func(x int) int
f = func(x int) int {
if x == 1 {
return 1
}
return x * f(x-1)
}
return f
}
英文:
You can declare f
first:
func foo() func(int) int {
var f func(x int) int
f = func(x int) int {
if x == 1 {
return 1
}
return x * f(x-1)
}
return f
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论