匿名函数之lambda表达式

举报
福州司马懿 发表于 2021/11/19 05:46:17 2021/11/19
【摘要】 匿名函数就如名字暗示的一样,匿名函数实际上就是一个没有名字或者标示(identifier)的函数。匿名函数只有内容(也可以叫做body),我们可以将其存储在一个变量中,以便之后使用,或者将其当做一个参数传递给另外一个函数使用。 Objective-C是构建于C语言之上,属于强类型编译语言。因此闭包性和匿名函数在Objective-C中...

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

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

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

一、Objective-C实现匿名函数


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

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

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

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

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

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


  
  1. //使用C# 2.0中的匿名方法获取字符串长度
  2. Func<string, int> strLength = delegate(string str) { return str.Length; };
  3. Console.WriteLine(strLength("Hello World!"));
  4. //使用Lambda表达式
  5. //(显式类型参数列表)=> {语句},lambda表达式最冗长版本
  6. strLength = (string str) => { return str.Length; };
  7. Console.WriteLine(strLength("Hello World!"));

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


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


文章来源: blog.csdn.net,作者:福州-司马懿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/chy555chy/article/details/51620043

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。