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

我是Go的新手,为了练习,我在Exclusm上做了一些编码练习。我在一个特定的练习中皖磕绊绊,在这个练习中,我很难解开解决方案。代码如下:


// Ints defines a collection of int values

   type Ints []int


// Lists defines a collection of arrays of ints

type Lists [][]int


// Strings defines a collection of strings

type 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 函数,那将是有帮助的。谢谢


扬帆大鱼
浏览 72回答 1
1回答

HUX布斯

该方法将函数作为参数。它期望它是 - 一个函数,它接受 a 并返回一个 .Keepfunc (int) boolintbool当 在 中调用时,代码会传递给它一个具有正确签名的匿名函数(take , return )。此匿名函数调用(这是传入的函数)并返回其响应(否定)。KeepDiscardintboolstrainerDiscard这个想法是一个过滤器功能:它告诉你要保留哪些元素。因此,的实现很简单:迭代所有元素,并仅保留返回 true 的元素。strainerKeepstrainerDiscard是用 巧妙的方式编写的,而不是像这样编写循环:Keepfunc (i Ints) Discard(strainer func(int) bool) (o Ints) {    for _, v := range i {        if !strainer(v) {            o = append(o, v)        }    }    return}相反,它使用反转 结果的函数进行调用。Keepstrainer
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go