我是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
- 1 回答
- 0 关注
- 71 浏览
添加回答
举报
0/150
提交
取消