服装品牌网站建设,重庆餐饮品牌策划公司,wordpress自动关键词,云建站系统前三名https://www.xin3721.com/eschool/python.html惰性求值在开始介绍今天要讲的知识之前#xff0c;我们想要理解严格求值策略和非严格求值策略之间的区别#xff0c;这样我们才能够深有体会的明白为什么需要利用这个技术。首先需要说明的是C#语言小部分采用了非严格求值策略我们想要理解严格求值策略和非严格求值策略之间的区别这样我们才能够深有体会的明白为什么需要利用这个技术。首先需要说明的是C#语言小部分采用了非严格求值策略大部分还是严格求值策略。首先我们先演示非严格求值策略的情况我们先在控制台项目中写一个DoOneThing方法。然后在Main方法中写入下面这串代码然后我们运行程序会发现DoOneThing方法并没有执行。当然这看起来也很正常因为这是或并且第一个已经是true了。整个表达式就是true了自然第二个就无需求值了。但是这恰恰就是非严格求值的策略如果是严格求值策略的话整个表达式都会计算。接着就是严格求值策略的情况了这个相信很多人都会立马明白首先我们需要再写一个DoSomeThing方法接着修改Main方法执行之后我们可以看到如下的结果但是我们可以清楚的看到a的值是false根本不会使用b值但是传递参数的时候已经将DoOneThing方法执行并赋值给b假设这个方法是一个非常耗时的操作。那么我们就会白白浪费掉这段时间最后求得的值也没有使用的到。而这正是严格求值策略而今天的主要目标就是改变这种情况能够在我们确定需要某个值的时候才计算。下面我们就可以开始改造这个方法让其能够支持惰性求值。首先我们修改DoSomeThing方法这里我们将参数类型都改成了函数这样将要传递进来的参数都改变成函数。只有在我们需要的时候才执行求值否则是不会运行的对应的Main方法中我们需要按照如下方式修改这里我们并不需要把DoOneThing方法的返回类型改掉如果这样的话。在现有项目上使用函数式编程就会显得太麻烦了。这里我们仅仅只需要利用匿名函数就可以办到了下面我们可以看最后的执行效果DoOneThing方法并没有执行因为DoSomeThing中根本没有确定使用这个变量这样我们就能够节省下这部分计算的时间但是事实上我们还没有结束实际的开发中我们可能需要多次使用这个值比如下面我们修改DoSomeThing方法并且在Main方法中调用DoSomeThing方法时将第一个参数改成true然后执行我们就可以看到下面的输出结果DoOneThing方法被执行了两次当然我们可以利用局部变量保存可能你会这么写如果这么写那么我们的惰性求值就没有任何意义了因为一进入这个方法就执行了这个方法跟传递参数时直接将运算后的结果赋值给b没有任何区别了。当然也有其他一些技巧可以避免但是这些技巧可不是下面要讲的内容我们可以将其封装起来比如我们可以写个LazyS类我们可以看到在构造方法部分我们将对应的函数作为参数接收并保存到function中只有再调用Value时候会执行该函数并将值保存并且在下次调用时如果已经求值过则直接返回缓存过的值这样就能够避免重复的执行了对应的我们还要修改DoSomeThing方法和Main方法最终执行后我们可以看到仅执行了一次DoOneThing方法一些读者可能为问为什么类名不要Lazy而是加个S因为.net中已经为我们包含了Lazy类相信很多人基本上从没有用过。只知道Func和Action的存在下面我们修改我们的代码直接利用自带的最终的结果之前的是一摸一样当然系统自带的Lazy功能更多并且支持多线程。就到这里为止吧周五了大家已经按耐不住了写了太多可能就没有心思往下看了所以将这些全部一个一个拆分开来细讲。