当前位置:  开发笔记 > 编程语言 > 正文

为什么C#没有词法嵌套函数?

如何解决《为什么C#没有词法嵌套函数?》经验,为你挑选了2个好方法。



1> yfeldblum..:

事实上,C#就是这样.

double sqrt(double x) {
    var goodEnough = new Func(guess =>
        Math.Abs(square(guess) - x) < 0.001
    );
    var improve = new Func(guess =>
        average(guess, x / guess)
    );
    var sqrtIter = default(Func);
    sqrtIter = new Func(guess =>
        goodEnough(guess) ? guess : sqrtIter(improve(guess))
    );
    return sqrtIter(1.0);
}


+1.除了正确的尾递归部分.:)

2> configurator..:

就像Justice说的那样,你可以用C#3.5和lambdas做到这一点; 如果你有C#2.0,你可以使用匿名函数,虽然它会不那么性感:

double sqrt(double x) {
    Func goodEnough = delegate(double guess) {
        return Math.Abs(square(guess) - x) < 0.001;
    };
    Func improve = delegate(double guess) {
        return average(guess, x / guess);
    };
    Func sqrtIter = null;
    sqrtIter = delegate(double guess) {
        return goodEnough(guess) ? guess : sqrtIter(improve(guess));
    };
    return sqrtIter(1.0);
}

编辑:我忘了,Func没有在C#2.0中定义,所以你必须自己定义:

 public delegate TResult Func(T guess);

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有