在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
, bint
)int
{return
a+b; } fmt.Printf("%d"
,myFunc(1
,2
))/<code>
上面是将定义的匿名函数赋值给一个变量myFunc, 后面通过调用myFunc(1,2)来获得调用的值。
go的匿名函数还可以直接调用,代码如下:
<code>res :=func
(a
int
,bint
)int
{return
a+b }(1
,2
) fmt.Printf("%d"
,res)/<code>
res 将直接返回调用匿名函数的值。
go的匿名函数还可以被定义为全局变量,代码如下:
<code>var
MyFunc =func
(a
int
,bint
)int
{return
a+b } fmt.Printf("%d"
, MyFunc(1
,2
))/<code>
总结:
拥有函数名的函数只能在包级语法块中被声明,通过函数字面量(function literal),我们可绕过这一限制,在任何表达式中表示一个函数值。函数字面量的语法和函数声明相似,区别在于func关键字后面没有函数名,函数值字面量是一种表达式,它的值被成为匿名函数(anonymous function)。