doublel83422 2016-12-01 13:38
浏览 23
已采纳

功能内的功能

I came across some code which uses functions like the following:

func main() {

    ...
    X:
        ...

}

I'm confused as to what this does. Here is an example I created to try and mess around and see what's happening, but I don't completely understand what K is, is it a closure? A lambda function?

package main

import "fmt"

func main() {
    for i:=0; i<10; i++ {
        K: for j:=0; j<10; j++{
            if i*j == 81 {
                fmt.Printf("%v,%v", i, j)
                break;
            } else {
                continue K;
            }
        }
    } 

}

I'm very new to Go and functional programming too so I'm trying to understand this notion.

  • 写回答

2条回答 默认 最新

  • dongyi2159 2016-12-01 13:41
    关注

    It's a label statement. You use it with goto, break or continue.

    From docs:

    It is illegal to define a label that is never used. In contrast to other identifiers, labels are not block scoped and do not conflict with identifiers that are not labels. The scope of a label is the body of the function in which it is declared and excludes the body of any nested function.

    They are useful in cases where you need to change the flow in some way, ie.

    K: for i:=0; i<10; i++ {
        for j:=0; j<10; j++{
            if (somefunction(j)) {
                continue K; // stops this for, and continue the outer one
            } else if (otherfunction(i, j)) {
                break K; // stops the outer loop
            }
            ....
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 使用Java milo连接Kepserver服务端报错?
  • ¥15 用ADS设计一款的射频功率放大器
  • ¥15 怎么求交点连线的理论解?
  • ¥20 软件开发方法学习来了
  • ¥15 微信小程序商城如何实现多商户收款 平台分润抽成
  • ¥15 HC32L176调试了一个通过TIMER5+DMA驱动WS2812B
  • ¥15 关于自相关函数法和周期图法实现对随机信号的功率谱估计的matlab程序运行的问题,请各位专家解答!