cocos2d-Lua之局部变量与全局变量

来源:互联网 发布:无线网网络受限怎么办 编辑:程序博客网 时间:2024/06/03 22:35

lua作为一门脚本语言,变量的声明不需要加变量类型,比如:

a = 5    //默认就是整型a = 5.5    //默认就是浮点类型a = "hello"     //默认就是字符串类型

当然lua脚本语言跟其他编程语言一样也是有全局变量和局部变量的,像前面变量a那样声明默认就是全局变量

local LuaLessionOne = class(“LuaLessionOne”, function()
return display.newScene(“LuaLessionOne”)
end)

a = 58.5 //1

function LuaLessionOne:ctor()    print(a)    //2    cc.ui.UILabel.new({            UILabelType = 2, text = "LuaLessionOne", size = 64})        :align(display.CENTER, display.cx, display.cy)        :addTo(self)endreturn LuaLessionOne

其他地方不用看,就只看做数字标记的地方,此时a就是一个全局的浮点型变量,输出结果是这样的:
这里写图片描述

可以看到输出了一个58.5的浮点型。

再加个函数:

a = 5    //默认就是整型a = 5.5    //默认就是浮点类型a = "hello"     //默认就是字符串类型a    //默认a无效,值为nil

当然lua脚本语言跟其他编程语言一样也是有全局变量和局部变量的,像前面变量a那样声明默认就是全局变量

local LuaLessionOne = class("LuaLessionOne", function()    return display.newScene("LuaLessionOne")end)a = 58.5       //1function LuaLessionOne:ctor()    fun()    print(a)    //2    cc.ui.UILabel.new({            UILabelType = 2, text = "LuaLessionOne", size = 64})        :align(display.CENTER, display.cx, display.cy)        :addTo(self)endfunction fun()    a = "hello, world"endreturn LuaLessionOne

输出结果:
这里写图片描述

可以看到这里输出了“hello,world”的字符串,在以往C/C++,Java这类语言中函数中的变量默认都是局部变量,而在lua脚本语言中,即使函数内部的变量默认仍然是全局变量,这就是脚本语言的强大啊(并且fun()函数的声明是在使用之后,同样也是可以使用的,就是涉及到函数的全局性问题了,后面再说,当然,如果把fun()的调用放在print(a)之后,定然就打不出来“hello,world”了,毕竟打印在前,fun在后,不然这就不是强大的问题了,语句的先后顺序都不管了,那这门语言估计也没人能看懂了)

如果想把变量声明为局部变量就在变量前加local关键字,把上面的代码继续修改:

local LuaLessionOne = class("LuaLessionOne", function()    return display.newScene("LuaLessionOne")end)a = 58.5       //1function LuaLessionOne:ctor()    fun()    print(a)    //2    cc.ui.UILabel.new({            UILabelType = 2, text = "LuaLessionOne", size = 64})        :align(display.CENTER, display.cx, display.cy)        :addTo(self)endfunction fun()    local a = "hello, world"endreturn LuaLessionOne

现在的输出结果就跟第一次一样了,现在fun中的a变成了函数中的局部变量:

这里写图片描述

那如果把a = 58.5前加个local会是个什么效果呢,那a就只能在当前文件(假设这个文件名加test.lua)中使用,换了其他文件就无效了。那么再加一个another.lua文件

--another.lua文件a = "aa.lua中的变量a"
--test.lua文件require("app.scenes.another")   //导入another.lua文件local LuaLessionOne = class("LuaLessionOne", function()    return display.newScene("LuaLessionOne")end)--a = 58.5function LuaLessionOne:ctor()    fun()    print(a)    cc.ui.UILabel.new({            UILabelType = 2, text = "LuaLessionOne", size = 64})        :align(display.CENTER, display.cx, display.cy)        :addTo(self)endfunction fun()    local a = "hello, world"endreturn LuaLessionOne

可以看到此时another.lua文件中的变量a是全局变量,导入到test.lua中仍然可用,因此输出结果是这样的:

这里写图片描述

那现在把another.lua中的变量a声明为local局部变量,test.lua中保持不变,再运行一下:

--another.lua文件local a = "aa.lua中的变量a"

此时another.lua中的变量a为local局部变量。即使被导入到了test.lua文件中,但在test.lua中无效,因此输出结果为:

这里写图片描述

可以看到此时a是nil,因为在test.lua中的print(a)前并没有a变量的声明,another.lua中的a在test.lua中无效。

0 0
原创粉丝点击