【Lua问题】attempt to call field 'extra' (a nil value)
local self = {
balance = initialBalance,
LIM = 10000.00,
}
local withdraw = function (v)
self.balance = self.balance - v
end
local deposit = function (v)
self.balance = self.balance + v
end
local extra = function ()
if self.balance > self.LIM then
return self.balance*0.10
else
return 0
end
end
local getBalance = function ()
return self.balance + self.extra()
end
return {
withdraw = withdraw,
deposit = deposit,
getBalance = getBalance,
}
end
---------------------------------------------
acc1 = newAccount (1000.00)
acc1.withdraw(300.00)
print(acc1.getBalance())
----------------------------------------------
运行后提示:
lua: hello.lua:25: attempt to call field 'extra' (a nil value)
stack traceback:
hello.lua:25: in function 'getBalance'
hello.lua:37: in main chunk
[C]: ?
>Exit code: 1
--------------------------------------------
实在搞不懂啊,根据教程16.4整合的。求大神指导,谢谢! 展开
1、 遇到磁盘碎片无法整理时,很多时候是由磁盘垃圾引起的,如果整理磁盘无法进行,不妨先对磁盘的垃圾进行整理,也许经过清理后,问题就解决了。
2、 清理磁盘垃圾的方法有很多,可用软件,也可用Windows自带的磁盘清理工具,本文以自带的工具为例,介绍磁盘垃圾清理方法。
3、 以C盘为例,C盘也是碎片最多的盘,先在本地C磁盘上右键,选择菜单中的“属性”,就会开始对磁盘上的垃圾进行扫描。
4、 等扫描完成后,就会进入清理窗口,选择“磁盘清理”这个选项卡,在这个界面,有个“要删除的文件”复选列表,找出要删除的项,打上勾,如临时文件,Interne缓存,系统错误内存转储文件,缩略图等等。完成勾选后,按下面的“确定”按钮,开始清理,清理会需要一定时间,根据垃圾文件多不而定,清理完成后,可再去试试是否能进行磁盘碎片整理。
5、 在进行磁盘整理时,一定要停止文件操作,否则就可能出问题,如写入文件,更新驱动等,如果在整理磁盘碎片时,操作文件,会严重影响整理的进行,本来十分钟可完成的磁盘整理,可能会延迟半个小时或一二个小时才能完成。
6、 更严重的是,在整理时,如果写入或读取文件,极易引起文件损坏或丢失,出现问题也就不奇怪了,所以在碎片整理时,不要进行文件操作。
7、 在整理磁盘碎片时,最好临时退出安全杀毒类软件,因为这些软件时时刻刻在监控着系统文件的使用,任何对系统文件的修改或移动,都会被安全软件所阻止或提示,它可能会把这种磁盘碎片整理当然病毒来对待,所以,在磁盘整理时,一定要临时关闭安全杀毒软件,这样才会很顺利进行,退出安全杀毒软件,磁盘整理速度也会更快。
8、 如果在整理磁盘时出现错误提示,还有一个最大的可能,就是磁盘的文件系统有错误,有了这种错误,是无法进行磁盘整理的,必须先把这种错误处理掉,才可完成磁盘整理。
9、 进入本地磁盘的属性窗口后,首先选择“工具”这个选项卡,进入工具界面后,找到“查错”这一项,该选项将检查驱动器(磁盘)中的错误,点击这一项中的“开始查错”按钮,会进入下一个磁盘检查选项窗口。
1、关闭Word;
2、 删除normal.dot(将引号里面的“%appdata%microsoft emplates”粘贴到“运行”,回车,删除normal.dot 或重为其他的名字);
3、启动Word,此时由于Word无法识别重命名后的Normal模板文件,于是它会自动创建一个新的Normal模板。
4、点“开始”,在“运行”中输入“winword /a”可以启动word,打开“工具/选项/常规”,找到“打开时更新自动方式的链接”这一选项,把它前面的对勾去掉。保存退出。重新启动Word试一下,如果用winword /a还是不能正常的启动Word。
5、尝试删除微软拼音3.0(输入法)。
6、在开始-运行里输入regsvr32 /u PINTLGNT.IME,确定后再次尝试打开Word;
7、如果上述方案都无法解决,建议客户使用office安装程序或是安装光盘重新安装Word组件。重装安装还是不行,就只能考虑重装系统了。
不要self.extra,直接extra就行……self表中没有extra这个键值,自然会报错
老实说个人非常不推荐这种写法,难看而且不好维护;除非是环境有特定需求,否则模拟oop的时候常见写法是:
local a = {}
function a.create()
local t = {m1 = v1, m2 = v2}
return setmetatable(t, {__index = a})
end
function a:public_method1()
--body
end
local function a:private_method1()
--body
end
return a
--在其他文件中使用时直接
local A = require("a")
即可
这样无论阅读代码还是以后维护都简单很多……作用域,接口等清晰明了
强! 谢谢!
刚学习这个东西,我们做手游需要Lua,能否给点建议,如何学,或者该学哪些重要的(对于游戏来说)能尽快上手呢?
这个得看你们的框架用的是什么……lua的特点是提供机制不提供功能,通过简单强大的基本语言特性(表,元表,一等函数等等)能够实现多模式的编写……所以重要的就是多找代码学习常见的实现惯例
资源方面官方读物lua程序设计已经很给力了,反正自己多试就行……另外么就是lua user wiki上有挺多好文章,涉及不少语言细节……当然有条件的可以看lua虚拟机的源码
那啥扯远一句如果是用的cocos2d-x的lua绑定的话(貌似国内很多组喜欢用这个,不知道你们是不是)……自己多去看官方教程吧……个人非常不喜欢这个框架,cocos2d-x复杂的对象模型对lua接口开放的不是很好,而且貌似开发组很喜欢那种lua ffi式的调用,写出来的代码……lua味变得很奇怪
1、 遇到磁盘碎片无法整理时,很多时候是由磁盘垃圾引起的,如果整理磁盘无法进行,不妨先对磁盘的垃圾进行整理,也许经过清理后,问题就解决了。
2、 清理磁盘垃圾的方法有很多,可用软件,也可用Windows自带的磁盘清理工具,本文以自带的工具为例,介绍磁盘垃圾清理方法。
3、 以C盘为例,C盘也是碎片最多的盘,先在本地C磁盘上右键,选择菜单中的“属性”,就会开始对磁盘上的垃圾进行扫描。
4、 等扫描完成后,就会进入清理窗口,选择“磁盘清理”这个选项卡,在这个界面,有个“要删除的文件”复选列表,找出要删除的项,打上勾,如临时文件,Interne缓存,系统错误内存转储文件,缩略图等等。完成勾选后,按下面的“确定”按钮,开始清理,清理会需要一定时间,根据垃圾文件多不而定,清理完成后,可再去试试是否能进行磁盘碎片整理。
5、 在进行磁盘整理时,一定要停止文件操作,否则就可能出问题,如写入文件,更新驱动等,如果在整理磁盘碎片时,操作文件,会严重影响整理的进行,本来十分钟可完成的磁盘整理,可能会延迟半个小时或一二个小时才能完成。
6、 更严重的是,在整理时,如果写入或读取文件,极易引起文件损坏或丢失,出现问题也就不奇怪了,所以在碎片整理时,不要进行文件操作。
7、 在整理磁盘碎片时,最好临时退出安全杀毒类软件,因为这些软件时时刻刻在监控着系统文件的使用,任何对系统文件的修改或移动,都会被安全软件所阻止或提示,它可能会把这种磁盘碎片整理当然病毒来对待,所以,在磁盘整理时,一定要临时关闭安全杀毒软件,这样才会很顺利进行,退出安全杀毒软件,磁盘整理速度也会更快。
8、 如果在整理磁盘时出现错误提示,还有一个最大的可能,就是磁盘的文件系统有错误,有了这种错误,是无法进行磁盘整理的,必须先把这种错误处理掉,才可完成磁盘整理。
9、 进入本地磁盘的属性窗口后,首先选择“工具”这个选项卡,进入工具界面后,找到“查错”这一项,该选项将检查驱动器(磁盘)中的错误,点击这一项中的“开始查错”按钮,会进入下一个磁盘检查选项窗口。
1、关闭Word;
2、 删除normal.dot(将引号里面的“%appdata%microsoft emplates”粘贴到“运行”,回车,删除normal.dot 或重为其他的名字);
3、启动Word,此时由于Word无法识别重命名后的Normal模板文件,于是它会自动创建一个新的Normal模板。
4、点“开始”,在“运行”中输入“winword /a”可以启动word,打开“工具/选项/常规”,找到“打开时更新自动方式的链接”这一选项,把它前面的对勾去掉。保存退出。重新启动Word试一下,如果用winword /a还是不能正常的启动Word。
5、尝试删除微软拼音3.0(输入法)。
6、在开始-运行里输入regsvr32 /u PINTLGNT.IME,确定后再次尝试打开Word;
7、如果上述方案都无法解决,建议客户使用office安装程序或是安装光盘重新安装Word组件。重装安装还是不行,就只能考虑重装系统了。