go 语言匿名函数

在C++ 11 中有 lambda 函数,如下代码所是:

<code>

auto

myFunc = [](

int

a,

int

b)->

int

{

return

a+b; };

printf

(

"%d"

, myFunc(

1

,

2

));/<code>

同样在go语言中也有类似lambda的函数。在Go语言中,lamda、匿名函数和内联函数的实现称作函数字面量(function literals),当一个函数足够小的时候,你可以创建一个函数字面量。

<code>myFunc := 

func

(a

int

, b

int

)

int

{

return

a+b; } fmt.Printf(

"%d"

,myFunc(

1

,

2

))/<code>

上面是将定义的匿名函数赋值给一个变量myFunc, 后面通过调用myFunc(1,2)来获得调用的值。

go的匿名函数还可以直接调用,代码如下:

<code>res := 

func

(a

int

,b

int

)

int

{

return

a+b }(

1

,

2

) fmt.Printf(

"%d"

,res)/<code>

res 将直接返回调用匿名函数的值。

go的匿名函数还可以被定义为全局变量,代码如下:

<code>

var

MyFunc =

func

(a

int

,b

int

)

int

{

return

a+b } fmt.Printf(

"%d"

, MyFunc(

1

,

2

))/<code>

总结:

拥有函数名的函数只能在包级语法块中被声明,通过函数字面量(function literal),我们可绕过这一限制,在任何表达式中表示一个函数值。函数字面量的语法和函数声明相似,区别在于func关键字后面没有函数名,函数值字面量是一种表达式,它的值被成为匿名函数(anonymous function)。


go 语言匿名函数


分享到:


相關文章: