亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

匿名函數返回結果的意義何在?

匿名函數返回結果的意義何在?

Go
慕尼黑8549860 2022-08-24 20:19:37
這是我在網上找到的示例代碼。func FindBestKElements(nums []int, k int) []int {    h := &IntHeap{}    for _, val := range nums { // O(N)        heap.Push(h, val) // O(log K)        if h.Len() > k {            heap.Pop(h) // O(log K)        }    }    return func() []int { // O (k log k)        result := make([]int, h.Len())        initialLen := h.Len()        for i := initialLen; i > 0; i-- {            result[i-1] = heap.Pop(h).(int)        }        return result    }()}該函數的 return 語句返回運行匿名函數的結果。我不確定這樣做會給你帶來什么好處。例如,為什么我們不能像下面這樣編寫上述方法?func FindBestKElements(nums []int, k int) []int {    h := &IntHeap{}    for _, val := range nums { // O(N)        heap.Push(h, val) // O(log K)        if h.Len() > k {            heap.Pop(h) // O(log K)        }    }    result := make([]int, h.Len())    initialLen := h.Len()    for i := initialLen; i > 0; i-- {        result[i-1] = heap.Pop(h).(int)    }    return result}
查看完整描述

1 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

在給定的示例中,它似乎是多余的。但是,在某些情況下,它可能是有用的。舉個例子:


package main


func main() {

   a := []int{10, 20, 30, 40}

   var b bool

   for _, n := range a {

      if n == 20 { b = true }

   }

   if b {

      println("pass")

   } else {

      println("fail")

   }

}

您可以使用另一個函數來代替狀態變量:b


package main


func main() {

   a := []int{10, 20, 30, 40}

   if func() bool {

      for _, n := range a {

         if n == 20 { return true }

      }

      return false

   }() {

      println("pass")

   } else {

      println("fail")

   }

}


查看完整回答
反對 回復 2022-08-24
  • 1 回答
  • 0 關注
  • 101 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號