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

方法中第三次返回语句的原因

方法中第三次返回语句的原因

Go
扬帆大鱼 2022-08-15 17:30:37
我是Go的新手,为了练习,我在Exclusm上做了一些编码练习。我在一个特定的练习中皖磕绊绊,在这个练习中,我很难解开解决方案。代码如下:// Ints defines a collection of int values   type Ints []int// Lists defines a collection of arrays of intstype Lists [][]int// Strings defines a collection of stringstype Strings []string// Keep filters a collection of ints to only contain the members where the provided function returns true.func (i Ints) Keep(strainer func(int) bool) (o Ints) {    for _, v := range i {        if strainer(v) {            o = append(o, v)        }    }    return}// Discard filters a collection to only contain the members where the provided function returns false.func (i Ints) Discard(strainer func(int) bool) Ints {    return i.Keep(func(n int) bool { return !strainer(n) })}我的问题来自丢弃方法,我不明白大括号中的第二个返回语句,因为Keep函数应该返回Ints类型的值,而不是布尔语句,除非我错过了什么,如果有人可以为我分解 Discard 函数,那将是有帮助的。谢谢
查看完整描述

1 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

该方法将函数作为参数。它期望它是 - 一个函数,它接受 a 并返回一个 .Keepfunc (int) boolintbool


当 在 中调用时,代码会传递给它一个具有正确签名的匿名函数(take , return )。此匿名函数调用(这是传入的函数)并返回其响应(否定)。KeepDiscardintboolstrainerDiscard


这个想法是一个过滤器功能:它告诉你要保留哪些元素。因此,的实现很简单:迭代所有元素,并仅保留返回 true 的元素。strainerKeepstrainer


Discard是用 巧妙的方式编写的,而不是像这样编写循环:Keep


func (i Ints) Discard(strainer func(int) bool) (o Ints) {

    for _, v := range i {

        if !strainer(v) {

            o = append(o, v)

        }

    }


    return

}

相反,它使用反转 结果的函数进行调用。Keepstrainer


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

添加回答

举报

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