主页 > TokenPocket安卓安装 > 「TokenPocket安卓下载」本地函数与 Lambda C# 7.0

「TokenPocket安卓下载」本地函数与 Lambda C# 7.0

admin TokenPocket安卓安装 2022年06月25日
int add(int x, int y) => x + y; Func<int, int, int> add = (x, y) => x + y;

局部函数可以是通用的。

此外,局部函数在捕获局部变量方面更有效:lambdas 通常将变量捕获到一个类中,而局部函数可以使用结构(使用传递ref),这再次避免了分配。

本地函数与 Lambda C# 7.0 问题描述:

我正在查看 C# 7.0 中的新实现,我发现它们实现了本地函数很有趣,但我无法想象本地函数优于 lambda
表达式的场景,以及两者之间的区别是什么。

第 1 个答案:

Mads Torgersen 在 C# Design Meeting Notes

局部函数可以实现为迭代器。

为了进一步扩展它,优点是:

不同的是,您不需要将它作为第一类对象,因此您不需要给它一个委托类型并分配一个实际的委托对象。此外,您可能希望它是递归的或通用的,或者将其实现为迭代器。

Lambda 不能是泛型的,因为它们必须分配给具有具体类型的变量(该类型可以使用外部范围的泛型变量,但这不是一回事)。

相比:

这也意味着调用本地函数更便宜,它们可以内联,可能会进一步提高性能。

函数。本地函数可以。

你想要一个辅助函数。您仅在单个函数中使用它,并且它可能使用在该包含函数范围内的变量和类型参数。另一方面,与 lambda

任何例子将不胜感激。谢谢。

表现。

试图掌握 Redis的一些基础知识时,我偶然发现了一篇有趣的博客文章。作者指出:Redis 是带有 epoll/kqueue 的单线程,并且在 I/O 并发方面可以无限​​扩展。 ...

中对此进行了解释,其中首先讨论了本地函数:

我确实知道 lambda 是anonymous函数,而本地函数不是,但我无法弄清楚真实世界的场景,其中本地函数比 lambda 表达式具有优势

局部函数看起来更好。

下一节:Redis 是单线程的,那么它是如何进行并发 I/O 的呢?

局部函数可以是递归的。

Lambdas 也可以是递归的,但它需要笨拙的代码,您首先分配null给委托变量,然后是 lambda。局部函数自然可以递归(包括相互递归)。

这在上面的引用中没有提到,可能只是我个人的偏见,但我认为正常的函数语法看起来比将 lambda 分配给委托变量更好。局部函数也更简洁。

Lambda 不能使用yield return(and yield break) 关键字来实现IEnumerable<T>-returning

创建 lambda 时,必须创建委托,在这种情况下这是不必要的分配。本地函数实际上只是函数,不需要委托。

广告位
标签: Java   Python   Codebaoku   编程宝库   G   C