如果你用Lua解释器或者Lua在线测试运行如下代码:
AAA = true print(AAA, type(AAA)) print(BBB, type(BBB))
程序可以正常运行,并输出结果:
true boolean nil nil
但是,在饥荒GLOBAL环境中,对一个未声明的全局变量的取值操作是不被允许的:
启动饥荒,在控制台输入:
print(AAA, type(AAA))
会产生一个错误:
variable 'AAA' is not declared
如果你无法确认一个全局变量是否存在,应该使用如下写法:
-- 只有MakeInventoryFloatable函数存在时,才设置物品漂浮 if rawget(_G, "MakeInventoryFloatable") ~= nil then MakeInventoryFloatable(inst, "anim", "anim") end
另外,全局变量不能在函数内声明,例如:
local function fn() AAA = "Hello Don't Starve!" end fn()
报错:
assign to undeclared variable 'AAA'
一般推荐先在函数外声明全局变量,因为函数内是可以修改已存在的全局变量的:
global("AAA") -- 声明 AAA 变量 -- 或者 AAA = nil -- 声明 AAA 变量并赋值为nil local function fn() AAA = "Hello Don't Starve!" -- 改成一个字符串 end fn()
也可以使用global函数,在函数内声明全局变量。
local function fn() global("AAA") -- 声明 AAA 变量 AAA = "Hello Don't Starve!" -- 赋值 end fn()
在饥荒GLOBAL环境中,以下操作是不被允许的:
这些操作是可行的:
如何不报错: