11.多脚本

11.多脚本


11.1 知识点

全局变量和局部变量

全局变量

--直接 变量 = 值 声明的变量都是全局变量
a = 1
b = "123"
-- lua中的循环体内的变量如果也是 变量 = 值 这样赋值的话也是全局变量 循环体外也能使用
for i = 1, 2 do
    c = "韬老狮" --循环体内全局变量赋值
end
print(c) --韬老狮 循环体外得到循环体内全局变量赋值
--频繁使用全局变量非常消耗内存

局部变量

--局部变量的关键字local
--通过 local 变量 = 值 声明局部变量
for i = 1, 2 do
    local d = "韬老狮"
    print("循环中的d" .. d) --循环中的d韬老狮 循环体内可以使用局部变量
end
print(d) --nil 循环体外不能使用局部变量
fun = function()
    local tt = "123123123" --函数中假如不加local的变量也会作为全局变量
end
fun()
print(tt)  --nil 函数中tt加了local是局部变量了
local tt2 = "555"
print(tt2) --555 刚声明的局部变量当然可以使用

执行多脚本

声明一个脚本

print("我是LuaMultiScriptTest脚本")
GlobalVariable = "我是全局变量"
print("在LuaMultiScriptTest脚本打印的:"..GlobalVariable)
local LocalAVariable = "我是局部变量"
print("在LuaMultiScriptTest脚本打印的:"..LocalAVariable)
-- 可以在脚本最后返回一个外部希望获取的内容 比如返回一个局部变量  给外部得到
return LocalAVariable

多脚本执行关键字 require 用于执行并加载指定脚本。

  • 多脚本执行关键字require 传入脚本名用双引号或单引号包裹 require后会执行并加载传入的脚本
  • require(“脚本名”) require(‘脚本名’)
  • 注意:脚本名不能是中文 执行的脚本要和当前脚本在同一目录下

require('LuaMultiScriptTest') --执行LuaMultiScriptTest这个测试Lua中多脚本的脚本
-- 我是LuaMultiScriptTest脚本
-- 在LuaMultiScriptTest脚本打印的:我是全局变量
-- 在LuaMultiScriptTest脚本打印的:我是局部变量
print(GlobalVariable)         --我是全局变量 LuaMultiScriptTest脚本的全局变量能被当前脚本使用
print(LocalAVariable)         --nil LuaMultiScriptTest脚本的局部变量不能被当前脚本使用
--如果是已经被require加载执行的脚本 加载一次过后不会再被执行
require("LuaMultiScriptTest")
--require执行一个脚本时 可以在脚本最后返回一个外部希望获取的内容 比如返回一个局部变量 用一个变量来接
--由于加载过一次LuaMultiScriptTest 先卸载LuaMultiScriptTest
package.loaded["LuaMultiScriptTest"] = nil
--再重新加载LuaMultiScriptTest
local testLA = require("LuaMultiScriptTest")
-- 我是LuaMultiScriptTest脚本
-- 在LuaMultiScriptTest脚本打印的:我是全局变量
-- 在LuaMultiScriptTest脚本打印的:我是局部变量
print(testLA) --我是局部变量

卸载多脚本

  • package.loaded[“脚本名”] 返回boolean 判断该脚本是否被执行
print(package.loaded["LuaMultiScriptTest"]) --假如没有在LuaMultiScriptTest脚本最后返回值的话是true 返回了的话是我是局部变量
---package.loaded["脚本名"] = nil 卸载已经执行过的脚本
package.loaded["LuaMultiScriptTest"] = nil
print(package.loaded["LuaMultiScriptTest"]) --nil
--可以重新加载LuaMultiScriptTest了
require("LuaMultiScriptTest")
-- 我是LuaMultiScriptTest脚本
-- 在LuaMultiScriptTest脚本打印的:我是全局变量
-- 在LuaMultiScriptTest脚本打印的:我是局部变量

大G表

  • _G表是一个总表(table) 他将我们申明的所有全局的变量都存储在其中
for k, v in pairs(_G) do
    print(k, v)
    -- a	1
    -- string	table: 00B49FE8
    -- xpcall	function: 00B479D0
    -- b	123
    -- package	table: 00B48050
    -- tostring	function: 00B47950
    -- print	function: 00B47590
    -- os	table: 00B4A038
    -- ...
end
--局部变量 加了local的变量时不会存到大_G表中

11.2 知识点代码

Lesson11_多脚本

print("**********多脚本************")

print("**********知识点一 全局变量和局部变量************")
--全局变量
--直接 变量 = 值 声明的变量都是全局变量
a = 1
b = "123"
-- lua中的循环体内的变量如果也是 变量 = 值 这样赋值的话也是全局变量 循环体外也能使用
for i = 1, 2 do
    c = "韬老狮" --循环体内全局变量赋值
end
print(c) --韬老狮 循环体外得到循环体内全局变量赋值
--频繁使用全局变量非常消耗内存

--局部变量
--局部变量的关键字local
--通过 local 变量 = 值 声明局部变量
for i = 1, 2 do
    local d = "韬老狮"
    print("循环中的d" .. d) --循环中的d韬老狮 循环体内可以使用局部变量
end
print(d) --nil 循环体外不能使用局部变量
fun = function()
    local tt = "123123123" --函数中假如不加local的变量也会作为全局变量
end
fun()
print(tt)  --nil 函数中tt加了local是局部变量了
local tt2 = "555"
print(tt2) --555 刚声明的局部变量当然可以使用


print("**********知识点二 执行多脚本************")
--多脚本执行关键字require 传入脚本名用双引号或单引号包裹 require后会执行并加载传入的脚本
-- require("脚本名") require('脚本名')
--注意:脚本名不能是中文 执行的脚本要和当前脚本在同一目录下
require('LuaMultiScriptTest') --执行LuaMultiScriptTest这个测试Lua中多脚本的脚本
-- 我是LuaMultiScriptTest脚本
-- 在LuaMultiScriptTest脚本打印的:我是全局变量
-- 在LuaMultiScriptTest脚本打印的:我是局部变量
print(GlobalVariable)         --我是全局变量 LuaMultiScriptTest脚本的全局变量能被当前脚本使用
print(LocalAVariable)         --nil LuaMultiScriptTest脚本的局部变量不能被当前脚本使用
--如果是已经被require加载执行的脚本 加载一次过后不会再被执行
require("LuaMultiScriptTest")
--require执行一个脚本时 可以在脚本最后返回一个外部希望获取的内容 比如返回一个局部变量 用一个变量来接
--由于加载过一次LuaMultiScriptTest 先卸载LuaMultiScriptTest
package.loaded["LuaMultiScriptTest"] = nil
--再重新加载LuaMultiScriptTest
local testLA = require("LuaMultiScriptTest")
-- 我是LuaMultiScriptTest脚本
-- 在LuaMultiScriptTest脚本打印的:我是全局变量
-- 在LuaMultiScriptTest脚本打印的:我是局部变量
print(testLA) --我是局部变量


print("**********知识点三 卸载多脚本************")
--package.loaded["脚本名"] 返回boolean 判断该脚本是否被执行
print(package.loaded["LuaMultiScriptTest"]) --假如没有在LuaMultiScriptTest脚本最后返回值的话是true 返回了的话是我是局部变量
---package.loaded["脚本名"] = nil 卸载已经执行过的脚本
package.loaded["LuaMultiScriptTest"] = nil
print(package.loaded["LuaMultiScriptTest"]) --nil
--可以重新加载LuaMultiScriptTest了
require("LuaMultiScriptTest")
-- 我是LuaMultiScriptTest脚本
-- 在LuaMultiScriptTest脚本打印的:我是全局变量
-- 在LuaMultiScriptTest脚本打印的:我是局部变量


print("**********知识点四 大G表************")
--_G表是一个总表(table) 他将我们申明的所有全局的变量都存储在其中
for k, v in pairs(_G) do
    print(k, v)
    -- a	1
    -- string	table: 00B49FE8
    -- xpcall	function: 00B479D0
    -- b	123
    -- package	table: 00B48050
    -- tostring	function: 00B47950
    -- print	function: 00B47590
    -- os	table: 00B4A038
    -- ...
end
--局部变量 加了local的变量时不会存到大_G表中

LuaMultiScriptTest

print("我是LuaMultiScriptTest脚本")
GlobalVariable = "我是全局变量"
print("在LuaMultiScriptTest脚本打印的:"..GlobalVariable)
local LocalAVariable = "我是局部变量"
print("在LuaMultiScriptTest脚本打印的:"..LocalAVariable)
-- 可以在脚本最后返回一个外部希望获取的内容 比如返回一个局部变量  给外部得到
return LocalAVariable


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏