这是一个关于为什么的问题。以下是内容:
C# 7.0 添加了一个名为“本地函数”的新功能。以下是代码片段。
我不理解的是,它在对同一方法进行递归调用。我们可以通过普通的foreach轻松实现这一点。那么为什么要使用本地函数? MSDN说:
作为迭代器实现的方法通常需要一个非迭代器包装器方法,以便在调用时急切地检查参数。(迭代器本身直到调用MoveNext才开始运行)。
需要帮助理解这个概念。
C# 7.0 添加了一个名为“本地函数”的新功能。以下是代码片段。
public int Fibonacci(int x)
{
if (x < 0) throw new ArgumentException("Less negativity please!", nameof(x));
return Fib(x).current;
(int current, int previous) Fib(int i)
{
if (i == 0) return (1, 0);
var (p, pp) = Fib(i - 1);
return (p + pp, p);
}
}
我不理解的是,它在对同一方法进行递归调用。我们可以通过普通的foreach轻松实现这一点。那么为什么要使用本地函数? MSDN说:
作为迭代器实现的方法通常需要一个非迭代器包装器方法,以便在调用时急切地检查参数。(迭代器本身直到调用MoveNext才开始运行)。
需要帮助理解这个概念。
Fibonacci
的函数用于控制输入。本地函数Fib
被用来封装逻辑的复杂代码,例如递归调用,而不必担心验证问题。由于是本地函数,您不能在未经验证的情况下调用Fib
。 - Cleptus