目录
注:本系列为《Lua程序设计-第4版》 的读书笔记,其中的见解有不完善的地方,可以在评论区指出,原版请看图书
Lua运行环境
一. 使用Lua语言解释器运行Lua语言:(下面的实例以Linux下ubuntu 服务器为例
安装:
配置环境变量:
运行:
1. 命令行运行Lua代码(交互模式运行Chunck):
二. Lua解释器完整介绍:
a. 参数选项:(注,所有参数都是可选的;当不使用任何参数调用lua时,就进入了上面的交互模式)
-e选项:该选项允许我们直接在命令行中输入代码
-i选项: 可以让Lua解释器在执行完指定的程序段后再进入交互模式(这一选项对于调试和手工测试很重要)
-l选项:该选项用于加载库之后再进入交互式模式,与-i有点类似
调用函数dofile(),该函数会立即执行一个文件。
b. Lua脚本:(Linux环境下为例)
Ⅰ. Lua解释器默认安装在 /usr/local/bin目录下,如下所示:
Ⅱ. 因此,当一个脚本的开头以 "#!/user/local/bin/lua" 开始时,这是一个Lua脚本,这个脚本可以执行Lua程序。
Ⅲ. 下面是一个名为lua_test.sh的脚本,内容为:
Ⅳ. 赋予其可执行权限,并运行:
三. 使用集成开发环境(IDE)运行Lua
前言(摘抄自 Lua程序设计第四版 作者:[巴西] Roberto lerusalimschy 著)
1993 年,当我和 Waldemar Luiz 开发 Lua 言时,我们并没有想象到它会像今天这样被如此广泛地使用 当年, lua 言只是为了两个特定项目而开发的实验室项目;如今, lua语言被大量应用于需要一门简明、可扩展 、可移植且高效的脚本语言的领域中,例如嵌入式系统 移动设备、物联网,当然还有游戏。
Lua 语言从一开始就被设计为能与 CIC++ 及其他常用语言开发的软件集成在一起使用的语言,这种设计带来了非常多的好处 一方面, Lua 言不需要在性能、与 三方软件交互语言等C语言已经非常完善的方面重复“造轮子”,可以直接依赖C语言实现上述特性,因而Lua 言非常精简;另一方面,通过引人安全的运行时环境、自动内存管理、良好的字符串处理能力和可变长的多种数据类型, Lua 语言弥补了C语言在非面向硬件的高级抽象能力、动态数据结构、鲁棒性、调试能力等方面的不足。
Lua 语言强大的原因之一就在于它的标准库,这不是偶然,毕竟扩展性本身就是 Lua语言的主要能力之一。Lua语言中的许多特性为扩展性的实现提供了支持:动态类型使得一定程度的多态成为了可能,自动内存管理简化了接口的实现(无须关心内存的分自己 释放及处理溢出),作为第一类值的函数支持高度的泛化,从而使得函数更加通用。
Lua 言除了是一门可扩展的语言外,还是一门胶水语言( glue language Lua 语言支持组件化的软件开发方式,通过整合已有的高级组件构建新的应用 这些组件通常是通过C/C++ 等编译型强类型语言编写的, Lua 言充当了整合和连接这些组件的角色 通常,组件(或对象)是对程序开发过程中相对稳定逻辑的具体底层(如小部件和数据结构)的抽象,这些逻辑占用了程序运行时的大部分 CPU 时间,而产品生命周期中可能经常发生变化的逻辑则可以使用 Lua 语言来实现 当然,除了整合组件外 Lua 语言也可以用来适配和改造组件,甚至创建全新的组件。
诚然, Lua 语言并非这个世界上唯一的脚本语言,还有许多其他的脚本语言提供了类似的能力 尽管如此, Lua 语言的很多特性使它成为解决许多问题的首选,这些特性如下。
可扩展: Lua 语言具有卓越的可扩展性。 Lua 的可扩展性好到很多人认为 Lua 超越了编程语言的范畴,其甚至可以成为一种用于构建领域专用语言( Domain-Specific Language, DSL )的工具包 。Lua 从一开始就被设计为可扩展的,既支持使用 lua 语言代码来扩展,也支持使用外部的 C语言代码来扩展 在这一点上有一个很好的例证: Lua 语言的大部分基础功能都是通过外部库实现的 我们可以很容易地将 Lua 、 C++、 Java、 C#和Python 等结合在一起使用。
简明: Lua 语言是一 精简的语言 尽管它本身具有的概念并不多,但每个概念都很强大 这样的特性使得 Lua 的学习成本很低,也有助于减小其本身的大小(其包含所有标准库的 Linux 64 位版本仅有 220 KB)
高效: Lua 语言的实现极为高效 独立的性能测试说明 Lua 言是脚本语言中最快的语言之一
可移植: Lua 语言可以运行在我们昕说过的几乎所有平台之上, 包括所有的 UNIX操作系统( inux FreeBSD 等)、 WindowS 、Android、 iOS、 OSX、IBM 大型机、游戏终端( PlayStation Xbox Wii 等) 、微处理器(如 Arduino )等 针对所有这些平台的源码本质上是 样的, Lua 语言遵循 ANSI (ISO) C标准,并未使用条 件编译来对不同平台进行代码的适配 ,因此,当需要适配新平台时,只要使用对应平台下的 ISO C编译器重新编译 Lua 言的源码就可以了
可以从Lua官网(The Programming Language Lua)上下载解释器的源码,如果知道使用C语言编辑器在自己的机器上编译 C代码,建议尝试从源码编译并安装 Lua 语言,或者 Lua Binaries网站 为大多数主流平台提供了已经编译好的Lua语言解释器。如果开发者使用的是 Linux 或 UNIX 操作系统,那么通常在软件库中已经提供了Lua语言执行环境。
下面是Lua运行环境的几个常用的搭建方式
可以从Lua官网(The Programming Language Lua)上下载解释器的源码,如果知道使用C语言编辑器在自己的机器上编译 C代码,建议尝试从源码编译并安装 Lua 语言,或者 Lua Binaries网站 为大多数主流平台提供了已经编译好的Lua语言解释器。如果开发者使用的是 Linux 或 UNIX 操作系统,那么通常在软件库中已经提供了Lua语言执行环境。
下面是Lua运行环境的几个常用的搭建方式
1. 进入这个网址 Lua: getting started, 选择Installing 中 LuaDist ,下载并安装
1. 解压文件夹 Binaries-LuaDist-batteries-0.9.8-Windows-x86.zip ,添加到环境变量
a.进入交互式解释器
Ⅰ.在命令行下直接输入Lua即可进入
Ⅱ. 进入之后 输入的每一条命令都会在按下回车后立即执行,例如,输入下面的语句
b. 退出交互式解释器:
有两种方式退出交互式解释器
Ⅰ. 输入EOF控制符 (POSIX下为Ctrl+D、Windowx下为Ctrl+Z)
Ⅱ. 调用操作系统的exit函数(执行os.exit())退出
例如,在Linux下输入ctrl+D退出
或者 执行os.exit()退出
lua -e "print(math.sin(12))"
print("Hello World")
a = 15
例如:下面的命令先加载lib库,然后再执行x=10的赋值语句,并最终进入交互模式,进入之后打印x可以看到我10
lua -i -llib -e "x=10"
例如,假设我们有一个如下所示的文件lib1.lua, 然后,在交互模式下运行,函数 dofile 在开发 阶段也非常有用 可以同时打开两个窗口, 一个窗口中使用文件编辑器编辑的 代码(例如文件 prog. lua ),另一个窗口中使用交互模式运行 Lu 语言解释器,当修改完代码并保存后,只要在 Lua语言交互模式的提示符下执行 dofile (” prog.lua ”),就可以加载新代码,然后就可以观察新代码的函数调用和执行结果了
function norm(x,y)
return math.sqrt(x^2 + y^2)
end
function twice(x)
return 2.0 + x
end
> dofile("lib1.lua") --加载文件
>n = norm(3.4, 1.0)
>twice(n) --->7.0880180586677
新建一个后缀为hello.lua的文件(Windows环境下运行), 此时会生成 Luac.out文件,再执行该文件
luac hello.lua
luac Luac.out
使用 IntelliJ IDEA配置Lua开发环境
Sublime Text3 配置Lua开发环境