为了感谢昨天忠实读者,今天赶快在贴出今天又研究通的一些关于require的用法,这个是本质的用法,同时给大家一个lua面向对象思想的例子,闲话不多说了,目录结构还和上一篇一样:
我们可以看到require这个工程下面有两个lua文件,大家一定很奇怪上次的c++文件哪去了,这次顺便给大家推荐个lua的调试工具luaEdit2010,我的资源中也有,贴个连接
http://download.csdn.net/detail/xueyunf/4448421
这里是下载地址,这个工具可以方便大家去调试和编写lua代码。这个工具可以加入断点让我们可以快速定位错误在什么地方。
先附上main.lua的代码:
package.path = package.path..”;F:\\lua\\require\\?.lua”
print(package.path)
local requiredpackage = require (“Berequired”)
print(tostring(requiredpackage))
function Vprint()
print(“main print!”)
end
Vprint()
–[[
下面下面是对complex这个类的调用
]]
local requirecomplex = {}
requirecomplex = complex;
requirecomplex.Vprint();
然后附上Berequired.lua的代码:
–下面是个私有函数
local function myPrivateFunction()
print(“this is a private function!”)
end
–下面是个公有接口
function Vprint()
myPrivateFunction()
print(“this is a public function!”)
print(“This is a required package!”)
end
–标识类名
complex = {Vprint = Vprint}
这样调用才是发明语言者提出require这个关键词的本意,下面贴出我的luaEdit的截图:
当然又被大家发现了,注释是我后加上的,呵呵,为了看代码的人便于理解,所以给大家一些提示,当然我说的东西在lua程序设计这本书中都有,只是我们可以看到,书太旧导致我不得不去官网看最新的英文资料,然后根据自己的理解然后去写代码,你一定想说这个东西的输出在哪?虽然看到了它极其类似vs2010的样子。于是我决定再给大家贴个图:
好吧,图有点大,显示在这好像不清晰,大家将就着看吧,正如我前面的关于编程范式的理解中说到的,其实每种语言都可以进行编程范式的设计,只要你愿意,:-)。
看本文需要特别注意,前提是你已经会配置和编译lua环境,当然这课的代码在前面的编译和调试环境中也是可以的,你喜欢哪种调试工具就使用哪种,每种工具都是OK的。
工具不是问题。
小提示:
1.那个complex必须放在最后,习惯c++或者其他面向对象语言者可能无法理解这个,这是由于lua继承了c的做法。
2.私有函数不是真正的私有,只是用作用域对其做了类似的限定。
3.公有接口也不是面向对象语言中的那样,我们只是做一些类似模拟而已。真正的面向对象还是面向过程完全在你心中,也就是说真正的核心是你的大脑来管理这些代码。
愿意看到这里朋友,首先恭喜你们,因为接下来的说的东西是程序的灵魂,
1:试想你若要管理拥有一个庞大的lua代码项目,而这些代码没有好的风格该怎么办?这正是前面写出这种风格的作用。
2:用这个模式你也可以建立一个自己的lua王国,去给自己留下一些可以复用的代码。
3:未来lua不会成为大众语言,但是他会成为c++和c的好伙伴,lua本身决定它不是为了独当一面,所以怎样利用设计模式和编程范式将它和其他语言结合是关键性的东西。
4:lua不是为了高性能计算用的东西,所以不要用来进行大型计算的核心部分,做它该做的事。每门语言都是这样的。
5:lua的用法以及其在大型程序中的应用暴雪给出了很好的例子,我们只要去理解那些程序lua用来做什么角色,自然会将它使用到最合适的地方。
6: 最重要的是忘了你以前学过的语言,好好把它理解融汇贯通。