2017-11-18 6 views
2

を理解することはできません、私はこのようないくつかのコードが見つかりました:は「ネット」いくつかのゴーコード

// 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)、そしてこのコードはコメントが言う動作をどのように実装していますか?

+0

func(Addr)boolは、_strategy_の** type **です。したがって、引数 "strategy"は、型_Addr_を取ってtrueまたはfalseを返す関数でなければなりません。 –

+0

なので、確かめたいのは、func(Addr)boolは "string"や "int"のような型ですか?どのようにしてこのfuncは戦略を満足する最初のアドレスを返しますか? – user8645601

答えて

1

は、フィルタ関数としての戦略を考える範囲ループ内addrがフィルタか 他を渡すことができ、これを行うには、完全に等しい方法は

func strategy(addr Addr) bool { 
    if addr == ... { 
     return true 
    } 

    return false 
} 

func main(){ 
    addr := first(strategy) 
} 
2
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] 
    } 

ようなものであれば、それだけでチェック言葉:012かかりAddraddrsという名前firstリターンに

  1. 機能引数は、Addrを返し、boolを返す関数でなければなりません。それ(strategy FUNC)はaddr
  2. 関数全体から非常に最初[0]Addrを返すfirstこと返しfirsttrue
  3. 次いで全体関数を返す場合addrsrange
  4. foraddraddr
  5. に機能strategyを適用しますaddrs、暗黙のうちに:strategyのいずれもがaddrを呼び出していない場合にのみ発生します。の0はtrueを返します。
1

Func firstは、引数strategyとして別の関数func(Addr) boolを受け入れます。 2番目の関数はAddrを入力とし、boolは加算器がokかどうかを返します。

最初にこのようなAddrが見つかった場合、最初の関数が終了してそれを返します。

ログインはフィルタと似ています。最初に一致する値が見つかるまでリストを繰り返します。

最後の手段として、誰もいない場合は、Addrの値が得られました。返信first関数は、sliceの最初の値を返します。

関連する問題