相信用lua的人都遇到过由于拼写错误把局部变量变成全局变量的情况,如何避免这个问题呢?
直接上代码!

    local mt = {__index = function(_, key)local info = debug.getinfo(2, "S")if info and info.what ~= "main" and info.what ~= "C" thenprint("访问不存在的全局变量:" .. key)endreturn rawget(_G, key)end,__newindex = function(_, key, value)local info = debug.getinfo(2, "S")if info and info.what ~= "main" and info.what ~= "C" thenprint("赋值不存在的全局变量:" .. key)endreturn rawset(_G, key, value)end}setmetatable(_G, mt)

先给全局表_G设置metatable,当访问到不存在的全局变量,或者对不存在的全局变量进行赋值时,调用debug.getinfo(2, “S”)获取调用的堆栈,如果不在主函数访问或者赋值新的全局变量,则抛出日志,提示开发者修改。
这就保证了全局变量只能在主函数声明,其它模块无法直接访问或者赋值未声明的全局模块,也就避免了大部分局部模块拼写错误的问题。

lua小技巧(二)——lua全局变量的检测相关推荐

  1. MATLAB小技巧(10)圆形检测实例

    MATLAB小技巧(10)圆形检测实例 前言 一. MATLAB仿真 二. 仿真结果 三. 小结 前言 MATLAB进行图像处理相关的学习是非常友好的,可以从零开始,对基础的图像处理都已经有了封装好的 ...

  2. 小六六平时的开发小技巧二(Nacos在服务配置中心的妙用)

    前言 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206/six-finger 絮叨 小六六打算开一个系列把自己平时的一些开发经验分享出来和 ...

  3. Linux之头文件引用小技巧(二十九)

    Linux之头文件引用小技巧 0.需求: 将本地头文件引用,#include "test.h"更换为#include <test.h>系统引用方式.1.目录结构如下├─ ...

  4. lua小技巧——lua全局变量的检测

    相信用lua的人都遇到过由于拼写错误把局部变量变成全局变量的情况,如何避免这个问题呢? 直接上代码! local mt = {__index = function(_, key)local info ...

  5. Halcon小技巧:二维平面根据两个点确定方向向量+三维空间点确定姿态

    一.二维平面确定法向向量 生成两个点,这个算子在Halcon三维中常用. 讲点连接成线 dev_set_line_width(2)*画点dev_set_color('red')gen_cross_co ...

  6. 小技巧 ----- 二维数组中通过(x, y)的偏移量来遍历(x, y)周围的元素

    应用场景 给定一个二维数组和一个点(x, y) 要求遍历点(x, y)十字形范围的点,包括(x, y) 结论 首先把这个二维数组竖下方向看作x轴,横右方向看作y轴 找到点(x, y)关于其上下左右点的 ...

  7. MATLAB | 那些你不得不知道的MATLAB小技巧(二)

    1: 实时脚本控件 实时脚本应该大部分人都会用了,但是实时脚本控件应该用的人还不多,怎么说呢,应该算一个更方便调整参数的模块叭.点击图示按钮即可插入各种类型的控件: 插入之后双击控件即可设置其属性: ...

  8. H7-TOOL迎来新版固件V2.09,WiFi压缩图传,FDCAN/Modbus助手波形打印上线,完善串口助手/RTT/Lua小程序,脱机烧增加新型号

    目录 H7-TOOL所有资源汇总(含操作手册): PC机软件:升级PC软件到V2.0.9 更新说明: 1.升级新版注意事项 2.脱机烧录 (1)升级STM32G0xx系列,增加STM32G050, S ...

  9. Ubuntu常用命令及技巧 #小技巧 #常用终端命令 #远程管理 #SSH #FTP

    Ubuntu常用命令及技巧) 零.思维导图 一.小技巧 二.终端命令格式 1)格式 2)查阅命令相关信息: 三.常用终端命令 1)目录相关 1>ls (list目录):查看当前路径包含的文件目录 ...

最新文章

  1. 《交互式程序设计 第2版》一3.1 下载并安装Processing
  2. mysql 主主+ Keepalived 高可用
  3. 虚荣的程序员--恶心,真的想吐
  4. 中有atoi函数吗_C++ 多态的实现及原理,深挖vptr指针,手动调用虚函数
  5. “21天好习惯”第一期-6
  6. Linux DNS服务详解——DNS基础知识
  7. 2022年中国游戏行业投融资发展报告
  8. 软件架构设计原则--开闭原则
  9. caffe 连接 matlab2016b
  10. McAfee Epo
  11. 极路由2hc5761刷华硕固件_[固件] 【原创首发】极二路由HC5761 9012.1.9227s成功刷成openwrt...
  12. 面试题:spring的循环依赖问题以及如何解决
  13. Createjs的控件 BitMap、MovieClip、Sprite
  14. 独孤九剑之SQL调优
  15. 之和质数c语言题判断,C语言经典例题100例——C语言练习实例33解答(质数判断)...
  16. python 读取csv文件转成字符串,python实现csv格式文件转为asc格式文件的方法
  17. Dubbo源码分析之构建远程Invoker
  18. 【技术推荐】WebLogic 反序列化漏洞深入分析
  19. 压力应力测试软件,管道强度和应力计算软件
  20. dynamic_cast实现原理

热门文章

  1. C++:评估二伽玛或 psi 功能(附完整源码)
  2. HTTP服务器开发教程
  3. 【冰糖R语言】Shiny简单笔记
  4. ctime(ctime头文件的作用)
  5. 从 Godaddy 转移域名到 Namesilo
  6. 网络安全工程师入门,防火墙基本概述,防火墙调试入门
  7. Kafka 入门教程(超详细)
  8. 建立合格的跨职能团队,你需要知道这些
  9. Java8之新日期时间篇
  10. 佳能eosr控制环能否计算机控制,EOS R有哪些隐藏功能