当前位置: 首页 > news >正文

Lua do-end

Description

在 Lua 中,使用 do-end 将一条或多条语句包起来作为一个语句块儿(block),形成一个作用域,在这个作用域中定义的局部变量只在当前作用域有效,出了作用域之后就会被垃圾回收器自动回收!

do
	local l_var = 1  -- 局部变量
	g_var = 2  -- 全局变量
	print(l_var, g_var)  -- 1	2
end
print(l_var, g_var)  -- nil	2

ps

在作用域中定义的全局变量不受作用域的影响!

Analogy

我们可以将 do-end 理解为 C# 中的 {},可以看下 Lua 和 C# 的循环语句:

Lua

for i = 1, 2, 1 do
	-- code block
end

C#

for(int i = 1; i <= 2; i++)
{
	// code block
}

Example

其实在日常开发中,我们主动使用 do-end 的情况并不多,但有时在测试代码的过程中,想要一个函数执行到某一处(还未执行完毕)就提前返回(相当于注释掉后面的代码),这时候就需要用到:

do return end

那么问题来了,我们直接 return 不就好了么,为嘛还要用 do-end 包一层?

那我们就不包嘛:

function test()
	local x = 1
	return
	x = x + 1  -- 报错:'end' expected (to close 'function' at line 1) near '='
end

这不,和其他语言不一样,Lua 的语法不支持你这样写,人家规定 return 后面必须得要跟个 end 才行!


所以这样写才不会有问题:

function test()
	local x = 1
	do return end
	x = x + 1
end

相关文章:

  • VS Code 安装 VSIX 插件
  • 平台为王:Microsoft Office System为什么成功?
  • VS Code 对 Lua 代码格式化
  • 2020-拥抱经历,磨砺己身
  • 个人理财规划五步曲
  • AS报错:Didn‘t find class “okhttp3.OkHttpClient$Builder“ on path: DexPathList[[...]]
  • 九段理财:投资人才是高手
  • 视频格式转换软件 XMedia Recode
  • 40年:你也能成为亿万富翁
  • Lua 字符与ASCII码互转
  • Lua实战之密码验证
  • 玩转“网上邻居”之网络配置(一)
  • 标准整数类型的取值范围
  • 玩转“网上邻居”之网络配置(二)
  • VS Code 更改快捷键
  • 【个人向】《HTTP图解》阅后小结
  • 【刷算法】求1+2+3+...+n
  • 10个最佳ES6特性 ES7与ES8的特性
  • CAP 一致性协议及应用解析
  • CentOS 7 防火墙操作
  • co模块的前端实现
  • es6
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Ruby 2.x 源代码分析:扩展 概述
  • Shadow DOM 内部构造及如何构建独立组件
  • vue-loader 源码解析系列之 selector
  • windows下mongoDB的环境配置
  • 闭包--闭包作用之保存(一)
  • 复习Javascript专题(四):js中的深浅拷贝
  • 关于字符编码你应该知道的事情
  • 技术:超级实用的电脑小技巧
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 聊一聊前端的监控
  • 漂亮刷新控件-iOS
  • 区块链将重新定义世界
  • 如何用vue打造一个移动端音乐播放器
  • 微信支付JSAPI,实测!终极方案
  • 温故知新之javascript面向对象
  • 新版博客前端前瞻
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 正则与JS中的正则
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • #pragma 指令
  • (2022 CVPR) Unbiased Teacher v2
  • (Forward) Music Player: From UI Proposal to Code
  • (第二周)效能测试
  • (二)PySpark3:SparkSQL编程
  • (二开)Flink 修改源码拓展 SQL 语法
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (区间dp) (经典例题) 石子合并
  • (四)c52学习之旅-流水LED灯