感受一下Lua的风格

Lua用了这么多年,抛开与C的交互数据,现在看来纯粹Lua里其实只有2个核心的东西——可以任意填充扩展的表和可以有无限遐想的闭包,私以为能够将他们的特性发挥好的,便算是Lua风格了。

C++风格与Lua风格的区别

举个最简单的例子,写一个枚举器,如果用C++的思维我会这么写:首先新建一个Accumulator的类对象,使用的时候New一个新的出来,定义好起始枚举,然后调用它的生成函数来生成新的枚举值,代码示例如下:

但是如果用Lua的思维我会这么写,首先定义一个生成枚举闭包的函数,使用的时候调用这个函数来获取一个新的枚举闭包,然后直接调用闭包来获取枚举值,代码示例如下:

是不是简洁多了?你们可以感受下。

C风格与Lua风格的区别:

其实这里我更想说是C的过程式编程与Lua支持的函数式编程的区别,这里我们举个例子,现在有一个数组序列,我们想计算里面所有奇数和。如果用C的写法是这样的:

再来用lua的函数式写一遍,是这样的:

乍看一下下面这种写法比上面的要复杂一些,但是灵活性却不是一个档次的。做程序开发的最烦的是什么?需求变更!没有之一!所以如果能牺牲一定的简洁来换取一定灵活性,也是值得的。

假设现在来新需求了,需要求这个数组序列的偶数和,那么来看上面2种写法要如何修改。

C风格写法,没办法只能再加一个函数,变成这样:

Lua函数式风格写法,只需再加一个判断是否为偶数的函数,变为下面这样:

假设变态一点, 后来又来一个需求,需要求所有数的和,所有数的乘积,所有偶数的乘积,所有奇数的乘积,C风格写法只能继续加函数,这里我就不列举了。而Lua函数式这种写法的优势就凸显出来了,满足上面提到的需求仅需要这样就够了:

最后再来个变态需求,需要把原有的数组里元素全部翻倍,然后求他们的和。C风格的我就不再列举了。用Lua函数式风格来写是这样的,顺带还可以满足以后其他需求,你们感受下。


转自:转自Lua爱好者