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

希德

我是 Go 的新手,为了练习我在 Exercism 上做了一些编码练习。我在一个特定的练习上绊倒了,在这个练习中我很难理解解决方案。这是代码:

// 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) })
}

我的问题来自 Discard 方法,我不明白花括号中的第二个 return 语句,因为 Keep 函数假设返回 Ints 类型的值而不是布尔语句,除非我错过了什么,如果有人可以分解 Discard 函数对我来说会很有帮助。谢谢

伊莱·班德斯基

Keep方法将函数作为参数它期望它是func (int) bool- 一个接受 anint并返回 a的函数bool

当在Keep中调用时Discard,代码传递给它一个带有正确签名的匿名函数(take int, return bool)。这个匿名函数调用strainer(这是一个传递给 的函数Discard)并返回它的响应,否定。

这个想法是strainer一个过滤器函数:它告诉你要保留哪些元素。所以 的实现Keep很简单:迭代所有元素,只保留那些strainer返回 true 的元素

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

func (i Ints) Discard(strainer func(int) bool) (o Ints) {
    for _, v := range i {
        if !strainer(v) {
            o = append(o, v)
        }
    }

    return
}

相反Keep使用一个函数调用,该函数反转 的结果strainer

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用toString方法在第三个对象中打印两个对象?

matplotlib中的第三个堆积条

在Excel中查找符合条件的数据,查找最小日期,返回第三个值

Python列表返回与前两个值关联的第三个值

给定第三个列表,返回两个列表的索引列表

Visual Studio逃脱了Linq语句的第三个条件

在Django的第三个模型中引用两个关联模型的最佳方法

三元内联语句不适用于第三个条件?

使用Java中的第三个变量交换

第三个片段的调用方法时出错

在delphi中替换字符串中每个第三个字符的最佳方法

当连接三个表时,MySQL不返回任何内容。两个表在第三个表中具有外键。怎么了?

通过映射第三个表查询联接两个表,而无需从Oracle中的第三个表返回所有记录

如何仅显示Find语句的第三个匹配项?

.net 4.0比较2个列表并返回第三个列表中的差异

替换第三个值

在 EF CORE 中链接第三个模型

PHP if else 语句的第三个分支无法正常工作

Ruby:为什么第三个条件语句不为真?

从第三个表中检索数据

不会显示 LinearLayout 中的第三个 RecyclerView

尝试将列表 A 中的项目与列表 B 中的项目进行比较,然后返回第三个列表

对两个向量应用逻辑计算并在第三个向量中返回结果

Python/pandas:从两个数据帧中查找匹配值并返回第三个值

从第三个表中获取数据

比较两个列表中的值并从第三个列表中返回相似或最接近的值

MySQL DATABASE - 使用第三个表连接两个表的 SQL 语句

在什么情况下第二/第三个非空参数会在 COALESCE mysql 中返回?

比较2个数组并在python中写入第三个的最有效方法