在阅读“net”包的代码时,我发现了一些类似以下的代码:
// 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(Addr)的仿函数感到非常困惑,并且此代码如何实现注释所说的行为?
最佳答案
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
addr
的range
中的每个addrs
在strategy
上应用函数addr
strategy
函数)返回true
first
返回该addr
first
会从[0]
返回第一个Addr
addrs
,这意味着:仅当strategy
的addr
中没有对range
的addrs
调用返回true
时,才会发生。