为了账号安全,请及时绑定邮箱和手机立即绑定

匿名函数返回结果的意义何在?

匿名函数返回结果的意义何在?

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 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信