无法理解一些Go代码
问题描述:
,我发现像这样的代码:无法理解一些Go代码
// first returns the first address which satisfies strategy, or if
// none do, then the first address of any kind.
func (addrs addrList) first(strategy func(Addr) bool) Addr {
for _, addr := range addrs {
if strategy(addr) {
return addr
}
}
return addrs[0]
}
我真搞不清楚为什么FUNC包括:第一另一FUNC命名FUNC (Addr),以及该代码如何实现评论所说的行为?
答
考虑战略作为过滤器的功能,它只检查地址范围内循环可通过过滤器或不 另一个完全平等的方式做,这是像
func strategy(addr Addr) bool {
if addr == ... {
return true
}
return false
}
func main(){
addr := first(strategy)
}
答
1 func (addrs addrList) first(strategy func(Addr) bool) Addr {
2 for _, addr := range addrs {
3 if strategy(addr) {
4 return addr
}
}
5 return addrs[0]
}
在关键词:
- 功能上
addrs
名为first
回报Addr
花费strategy
参数必须是一个函数,它需要Addr
并返回bool
。 -
for
在addrs
range
每个addr
上addr
- 应用功能
strategy
如果它(strategy
FUNC)返回true
- 然后整体功能
first
返回该addr
- 整体功能
first
返回第一个[0]
Addr
从addrs
,暗示:只有当strategy
呼叫addr
时才会发生中的0返回true
。
答
Func first
接受作为参数strategy
另一种功能类型func(Addr) bool
。 所以第二个函数应该以Addr
作为输入并返回bool
加法器是否正常。
作为第一个这样的Addr
发现第一个函数退出并返回它。
登录与过滤器类似 - 迭代列表直到找到第一个匹配值。
作为最后的手段,如果没有人Addr
值得到肯定的答复第一个函数返回片中的第一个值。
func(Addr)bool是参数_strategy_的**类型**。所以参数“策略”必须是一个函数,它需要_Addr_类型的东西并返回true或false。 – 2017-11-18 08:40:31
所以,我想确认的一件事是:func(Addr)bool是类似“string”还是“int”的?但这个func如何返回满足策略的第一个地址? – user8645601