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

将命名函数发送到另一个函数

将命名函数发送到另一个函数

Go
慕村9548890 2022-06-27 17:34:10
我正在阅读本课https://gobyexample.com/collection-functions并看到下一个代码:package mainimport (    "fmt"    "strings")func Any(vs []string, f func(string) bool) bool {    for _, v := range vs {        if f(v) {            return true        }    }    return false}func main() {    var strs = []string{"peach", "apple", "pear", "plum"}    fmt.Println(Any(strs, func(v string) bool {        return strings.HasPrefix(v, "p")    }))}使用匿名函数它工作正常。但是如何在那里使用命名函数呢?我试过了:...    fmt.Println(Any(strs, strings.HasPrefix("p")))但是得到:./prog.go:96:41: not enough arguments in call to strings.HasPrefix    have (string)    want (string, string)./prog.go:96:41: cannot use strings.HasPrefix("p") (type bool) as type func(string) bool in argument to Any我究竟做错了什么?
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

Any()需要 type 的函数值func (string) bool,但strings.HasPrefix()有 type func (string, string) bool。不能直接通过。


这就是您首先使用函数文字的原因:传递具有正确类型的函数值。


如果你有一个完全具有这个签名的命名函数,你可以传递它:


func check(s string) bool {

    return strings.HasPrefix(s, "p")

}

并使用它:


fmt.Println(Any(strs, check))

哪个会输出(在Go Playground上试试):


true


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

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