程序段

简介: 程序段

我们将 Lua 语言执行的每一段代码(例如:一个文件或交互模式下的一行)称为一个程序段Chunk ),即一组命令或表达式组成的序列


程序段既可以简单到由一句表达式构成(例如输出“Hello World”的示例),也可以由多句表达式和函数定义(实际是赋值表达式)组成。


程序段在大小上没有限制,事实上,由于 Lua 语言也可以被用作数据定义语言,所以几 MB 的程序段也很常见。 Lua 语言的解释器可以支持非常大的程序段。


除了将源码保存成文件外,我们也可以直接在交互模式interactive mode )下运行独立解释器stand-alone interpreter )。当不带参数的调用 lua 时,可以看到如下输出:

$ lua
Lua 5.3.6  Copyright (C) 1994-2020 Lua.org, PUC-Rio
> 


此后,输入的每一条命令(例如: print "Hello World" )都会在按下回车键后立即执行。我们可以通过输入 EOF 控制字符( End-Of-FilePOSIX 环境下使用 Ctrl+DWindows 环境下使用 Ctrl+Z ),或调用操作系统库的 exit函数 (执行 os.exit() )退出交互模式。


Lua5.3 版本开始,可以直接在交互模式下输入表达式, Lua 语言会输出表达式的值。如下所示:

$  lua
Lua 5.3.6  Copyright (C) 1994-2020 Lua.org, PUC-Rio
> math.pi/4
0.78539816339745
> a=15
> a^2
225.0
> a+2
17


提示

Lua5.3 之前的老版本中,需要在表达式前加上一个等号,如下所示:

$ lua5.2
> a=15
> =a^2
225.0点击复制复制失败已复制

为了向下兼容, Lua5.3支持这种语法结构。

要以代码段的方式运行代码(不在交互模式下),那么必须把表达式包在函数 print 的调用中:

print(math.pi/4)
a=15
print(a^2)
print(a+2)


在交互模式下, Lua 语言解释器一般会把我们输入的每一行当做完整的程序块或表达式来解释执行。但是,如果 Lua 语言解释器发现我们输入的某一行不完整,那么它会等待直到程序块或表达式被输入完整后再进行解释执行。这样,我们也可以直接在交互模式下输入由很多行组成的多行定义。不过,对于这种较长的函数定义而言,将其保存成文件然后再调用独立解释器来执行通常更方便。


我们可以使用 -i 参数让 Lua 语言解释器在执行完指定的程序段后进入交互模式,如下所示:

$ lua -i prog

上述命令会在执行完文件prog中的程序段后进入交互模式,这对于调试手工测试很有用。


另外一种运行程序段的方式是调用函数 dofile ,该函数会立即执行一个文件。测试一下,通过 vscode 打开一个工程,然后新建 lib1.lua 文件,填入如下内容:

function norm(x, y) return math.sqrt(x ^ 2 + y ^ 2) end
function twice(x) return 2.0 * x end


进入交互模式,依次输入如下命令运行:

$ lua
Lua 5.3.6  Copyright (C) 1994-2020 Lua.org, PUC-Rio
> dofile("lib1.lua")
> n=norm(3,4)
> twice(n)
10.0


提示

函数 dofile开发阶段也非常有用。我们可以同时打开两个窗口,一个窗口中使用文件编辑器编辑代码(例如文件 prog.lua ),另一个窗口中使用交互模式运行 lua 语言解释器。当修改完成代码并保存后,只要在 lua 语言交互模式的提示符下执行 dofile("prog.lua") 就可以加载新代码了,然后就可以观察新代码的函数调用和执行结果了。当然, vscode yyds!

目录
相关文章
|
算法 计算机视觉 异构计算
目标检测的Tricks | 【Trick7】数据增强——Mosaic(马赛克)
目标检测的Tricks | 【Trick7】数据增强——Mosaic(马赛克)
2006 0
目标检测的Tricks | 【Trick7】数据增强——Mosaic(马赛克)
|
11月前
|
机器学习/深度学习 开发者 iOS开发
快速上手·10分钟完成一个引导页界面
快速上手·10分钟完成一个引导页界面
180 0
|
运维 监控 前端开发
一文吃透前端低代码的 “神仙生活”
一文吃透前端低代码的 “神仙生活”
203 1
|
监控 数据可视化
MES1.0.0正式发布|万界星空推出免费的MES系统
普通的免费MES系统只提供简单的基本功能让客户体验,而万界星空MES系统运用低代码的形式开发,由于其开发团队技术成熟、开发进度快,所以给出的功能是全面和健全的。万界星空MES系统是一款B/S结构、商业开源的生产执行管理系统,帮助制造企业实现自动化和数字化转型,可监控、跟踪、记录和控制从原材料到成品的产品制造流程。为国内离散制造业的中小企业提供一个专业化、通用性、低成本的MES系统解决方案。
lodash判断是否是空对象
lodash判断是否是空对象
872 0
|
安全 网络安全 数据安全/隐私保护
最简单易懂的ios(p12)证书上传流程,描述文件创建流程
最简单易懂的ios(p12)证书上传流程,描述文件创建流程
最简单易懂的ios(p12)证书上传流程,描述文件创建流程
|
XML Java API
ImageView(图像视图)
在API文档中我们发现ImageView有两个可以设置图片的属性,分别是:src和background 常识: ①background通常指的都是背景,而src指的是内容!! ②当使用src填入图片时,是按照图片大小直接填充,并不会进行拉伸 而使用background填入图片,则是会根据ImageView给定的宽度来进行拉伸
175 0
|
缓存 Python
python:文本文件的读取与写入
在简单的整理文件输入与输出后,打算再详细梳理一下一些关于文件的读取与写入的知识。 在使用open()函数打开或创建一个文件时,其默认的打开模式为只读文本文件。文本文件用于储存文本字符串,默认编码为Unicode。
python:文本文件的读取与写入
|
Linux
linux权限
linux权限
51 0
|
自然语言处理 算法 计算机视觉
举例Halcon,简述数字图像处理之Blob分析和纹理分析texture_laws
举例Halcon,简述数字图像处理之Blob分析和纹理分析texture_laws
846 0