C# 表达式.Lambda中的Tailcall参数
在中为tailcall优化提供参数的原因是什么C# 表达式.Lambda中的Tailcall参数,c#,generics,c#-4.0,lambda,expression-trees,C#,Generics,C# 4.0,Lambda,Expression Trees,在中为tailcall优化提供参数的原因是什么 Expression.Lambda(Expression body,bool tailcall, IEnumerable<ParameterExpression> Parameters) Expression.Lambda(表达式体,bool tailcall, IEnumerable参数) 只要它不影响结果,为什么我们要明确地为它指定一个值。我觉得进行tailcall优化总是更好的。你对此有不同的想法吗?这个设计很有趣 为tail
Expression.Lambda(Expression body,bool tailcall,
IEnumerable<ParameterExpression> Parameters)
Expression.Lambda(表达式体,bool tailcall,
IEnumerable参数)
只要它不影响结果,为什么我们要明确地为它指定一个值。我觉得进行tailcall优化总是更好的。你对此有不同的想法吗?这个设计很有趣 为
tailcall
参数传递true
,将尝试在尾位置调用方法,作为lambda主体内的尾调用
尾部位置是方法调用返回表达式的位置
至于更好,那是主观的
- 尾声总是比较慢
- 需要遵循某些规则(返回类型必须匹配或是引用)
- 您没有用于调试的堆栈跟踪
,而(true){…}
循环。这是一种非常常见的存在尾部调用的优化。@Ashley John:在调用方法之前,尾部调用会弹出堆栈。这就是为什么不能通过适当的尾部递归获得stackoverflow异常。