登录
首页 >  Golang >  Go问答

函数参数无效:参数传递无效

来源:stackoverflow

时间:2024-03-02 14:54:24 248浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《函数参数无效:参数传递无效》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我编写了以下代码。

package main

import (
    "fmt"
    "strings"
)

type student struct {
    name string
    age  int
    city string
}

func takefuncasparam(a func(st student, c string) bool, s []student) []student {
    var result []student
    for _, e := range s {
        if a(e,c) {
            result = append(result, e)
        }
    }
    return result
}

func main() {
    s1 := student{"subir", 30, "bolpur"}
    s2 := student{"mainak", 29, "bolpur"}
    s := []student{s1, s2}
    filterbyname := func(s student, c string) bool {
        return strings.contains(s.name, c)

    }
    result := takefuncasparam(filterbyname, s)

    fmt.println(result)
}

我在第 17 行收到编译错误。

undefined: c

那么在这种情况下如何将参数传递给filterbyname函数(c字符串)?


正确答案


takefuncasparam 的参数类型更改为 func(student) bool,即删除 c string 参数,如下所示:

func takefuncasparam(fn func(student) bool, s []student) []student {
    var result []student
    for _, e := range s {
        if fn(e) {
            result = append(result, e)
        }
    }
    return result
}

filterbyname 更改为一个函数,该函数采用 name 参数进行过滤,并返回 takefuncasparam 所需类型的新函数,即 func(student) bool,如下所示:

filterbyname := func(name string) func(student) bool {
    return func(s student) bool {
        return strings.contains(s.name, name)
    }
}

要使用新的过滤器函数,您需要使用要过滤的 name 参数来调用它,然后将返回的函数传递给 takefuncasparam,如下所示:

fn := filterByName("Subir")
result := takeFuncAsParam(fn, s)

// or

result := takeFuncAsParam(filterByName("Subir"), s)

https://go.dev/play/p/e3QemrZxB-S

理论要掌握,实操不能落!以上关于《函数参数无效:参数传递无效》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>