匿名函数之lambda表达式

时间:2022-06-11 20:31:14

匿名函数就如名字暗示的一样,匿名函数实际上就是一个没有名字或者标示(identifier)的函数。匿名函数只有内容(也可以叫做body),我们可以将其存储在一个变量中,以便之后使用,或者将其当做一个参数传递给另外一个函数使用。

Objective-C是构建于C语言之上,属于强类型编译语言。因此闭包性和匿名函数在Objective-C中是可以使用。

所谓的匿名函数大部分是采用lambda实现的,而Lambda虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能。

一、Objective-C实现匿名函数

^{printf("Hello, World!\n"); } ();  
//或
NSString * ( ^ myBlock )( int );
myBlock = ^( int number )
{
return [ NSString stringWithFormat: @"Passed number: %i", number ];
};
NSLog( @"%@", myBlock(5) );

二、C/C++语言实现匿名函数(C++11引入了lambda表达式)

注:C语言要实现匿名函数,只能通过宏定义的方式来实现

见 http://www.bubuko.com/infodetail-984294.html

使用C++11特性的匿名函数如下

[] { cout << "Hello, World" << endl; } ();  

三、C#实现匿名函数(C#2.0引入了lambda表达式)

//使用C# 2.0中的匿名方法获取字符串长度
Func<string, int> strLength = delegate(string str) { return str.Length; };
Console.WriteLine(strLength("Hello World!"));

//使用Lambda表达式
//(显式类型参数列表)=> {语句},lambda表达式最冗长版本
strLength = (string str) => { return str.Length; };
Console.WriteLine(strLength("Hello World!"));

四、Java实现匿名函数(Java8引入了lambda表达式)

Callable<String> c = () -> "done";  
//或
Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2);