跳至内容
DST-MOD
用户工具
注册
登录
站点工具
搜索
工具
显示页面
修订记录
反向链接
最近更改
媒体管理器
网站地图
注册
登录
>
最近更改
媒体管理器
网站地图
您的足迹:
•
甜牌
•
手柄
•
人物
•
摇摇车
•
小牌
•
树牌
•
回牌
06mod教程区:高级技巧:strict
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
==== 全局变量限制 ==== 如果你用Lua解释器或者[[https://www.dooccn.com/lua/|Lua在线测试]]运行如下代码: <code lua> AAA = true print(AAA, type(AAA)) print(BBB, type(BBB)) </code> 程序可以正常运行,并输出结果: <code> true boolean nil nil </code> 但是,**在饥荒GLOBAL环境中**,对一个**未声明**的全局变量的**取值**操作是不被允许的: 启动饥荒,在控制台输入: <code lua> print(AAA, type(AAA)) </code> 会产生一个错误: <code> variable 'AAA' is not declared </code> 如果你无法确认一个全局变量是否存在,应该使用如下写法: <code lua> -- 只有MakeInventoryFloatable函数存在时,才设置物品漂浮 if rawget(_G, "MakeInventoryFloatable") ~= nil then MakeInventoryFloatable(inst, "anim", "anim") end </code> 另外,全局变量不能在**函数内**声明,例如: <code lua> local function fn() AAA = "Hello Don't Starve!" end fn() </code> 报错: <code> assign to undeclared variable 'AAA' </code> 一般推荐先在函数外声明全局变量,因为函数内是可以修改已存在的全局变量的: <code lua> global("AAA") -- 声明 AAA 变量 -- 或者 AAA = nil -- 声明 AAA 变量并赋值为nil local function fn() AAA = "Hello Don't Starve!" -- 改成一个字符串 end fn() </code> 也可以使用global函数,在函数内声明全局变量。 <code lua> local function fn() global("AAA") -- 声明 AAA 变量 AAA = "Hello Don't Starve!" -- 赋值 end fn() </code> ==== 原理 ==== 去看饥荒源代码 <html><code>scripts/strict.lua</code></html>。 ==== 总结 ==== **在饥荒GLOBAL环境中**,以下操作是不被允许的: - 使用一个未声明的全局变量 - 在函数内声明一个全局变量 这些操作是可行的: - 在任何位置使用/修改一个已声明的全局变量 - 在函数外面 声明一个全局变量 如何不报错: - 要判断一个全局变量是否存在,使用 rawget(_G, "变量名") - 要在函数内部声明全局变量,使用 global("变量名")
06mod教程区/高级技巧/strict.txt
· 最后更改: 2021/11/04 20:33 (外部编辑)
页面工具
显示页面
修订记录
反向链接
回到顶部