gpt4 book ai didi

function - Go 是否允许一个函数使用另一个函数作为参数?

转载 作者:IT王子 更新时间:2023-10-29 00:38:07 26 4
gpt4 key购买 nike

问题出现在 Go 代码的第 17 行。下面是 python 和 Go 中的程序,因此您可以准确地看到我正在尝试做什么。 Python 有效,我的 Go 尝试都失败了。已经背靠背阅读了 golang.org,谷歌也没有找到任何东西。

def my_filter(x):
if x % 5 == 0:
return True
return False

#Function which returns a list of those numbers which satisfy the filter
def my_finc(Z, my_filter):

a = []
for x in Z:
if my_filter(x) == True:
a.append(x)
return a

print(my_finc([10, 4, 5, 17, 25, 57, 335], my_filter))

现在,我遇到问题的 Go 版本:

package main

import "fmt"

func Filter(a []int) bool {
var z bool
for i := 0; i < len(a); i++ {
if a[i]%5 == 0 {
z = true
} else {
z = false
}
}
return z
}

func finc(b []int, Filter) []int {
var c []int
for i := 0; i < len(c); i++ {
if Filter(b) == true {
c = append(c, b[i])
}
}
return c
}

func main() {
fmt.Println(finc([]int{1, 10, 2, 5, 36, 25, 123}, Filter))
}

最佳答案

是的,Go 可以有函数作为参数:

package main

import "fmt"

func myFilter(a int) bool {
return a%5 == 0
}

type Filter func(int) bool

func finc(b []int, filter Filter) []int {
var c []int
for _, i := range b {
if filter(i) {
c = append(c, i)
}
}
return c
}

func main() {
fmt.Println(finc([]int{1, 10, 2, 5, 36, 25, 123}, myFilter))
}

关键是你需要一个类型来传入。

type Filter func(int) bool

我还清理了一些代码,使其更加地道。我用范围子句替换了你的 for 循环。

for i := 0; i < len(b); i++ {
if filter(b[i]) == true {
c = append(c, b[i])
}
}

成为

for _, i := range b {
if filter(i) {
c = append(c, i)
}
}

关于function - Go 是否允许一个函数使用另一个函数作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21594333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com