初识Lua语言

Lua语言从一开始就被设计为能与c/c++及其他常用语言开发的软件集成在一起使用的语言。Lua语言作为一门胶水语言,支持组件化的软件开发方式,通过整合已有的高级组件可以轻松构建新的应用。在软件中台化开发模型中,Lua势必会扮演十分重要的角色。

当然,Lua还有其他特性和优点, Lua的运用场合也有其他,这里就不再赘述,接下来进入正题。

1、Lua解析器

学习Lua语言还是从helloworld开始。在Linux环境中:
在这里插入图片描述
或者你将打印“helloworld”的代码保存在本地文件hello.Lua中,然后运行它:在这里插入图片描述]不论是在命令行的,还是保存在文件的“print(“helloworld”)”,都称它们为一个程序段(chunk)。程序段即一组命令或者表达式组成的序列。程序段在没有大小上的限制,所以chunk可以只由一句表达式构成,也可以由多个表达式和函数定义构成。

我们可以直接在交互模式下运行解析器:
在这里插入图片描述
接下来我们输入的每一条表达式然后回车后将立即执行。需要注意的是,从Lua5.3版本开始我们可以直接在交互模式下输入表达式,Lua会输出表达式的值:
在这里插入图片描述
但在Lua5.3之前的版本需要在表达式前面加上一个等号:
在这里插入图片描述
当然了,为了向下兼容,Lua5.3版本也支持表达式前面加等号的语法。

说明:我的环境中/usr/local/bin/lua是5.3版本的Lua,/usr/bin/lua是5.1.4版本的Lua。默认是运行/usr/local/bin/lua。另外,同样是15的平方,5.3版本的Lua运算结果是225.0,在这之前的版本是225,这个跟版本的默认数值类型有关,后续会介绍。

在交互模式下,解析器会把我们输入的每一行当作完成的chunk或者表达式执行,若发现我们输入的某一行不完整那么它会等到chunk或者表达式完整后再进行解释执行。在http://www.lua.org/ftp/上可以下载到Lua的源代码,编译生成的lua可执行程序即为Lua解析器。Lua可执行程序的完整参数为:

lua  [options]  [script  [args] ]

[]表明所有的参数都是可选的,我们可以使用-i选项让Lua解析器执行完指定的chunk后进入交互模式:
在这里插入图片描述
调用dofile函数,该函数会立即执行一个文件:
在这里插入图片描述
如上,1_hello.lua定义了函数hello(),我们通过dofile()加载后再调用该函数。

-e选项允许我们直接在命令行输入代码:
在这里插入图片描述
-l选项用于加载库:
在这里插入图片描述
库代码位于1_hello.c中,使用-l选项时不需要加上.lua后缀。

Lua程序可以通过预先定义的全局变量arg去解析器传入的用户参数,例如:

$  lua  test.lua  a  b  c

解析器在运行代码前创建一个名为arg的表,其中存储了所有命令行参数,索引0中保存的内容为脚本名称,索引1中保存的内容为a,以此类推;在脚本名称之前的所有选项则位于负数索引值之上,如:

$  lua  -e  “sin=math.sin”  test.lua  a  b  c

解析器获取参数:

arg[-3]= “lua”
arg[-2]= “-e”
arg[-1]= “sin=math.sin”
arg[0]= “test.lua”
arg[1]= “a”
arg[2]= “b”
arg[3]= “c”

2、类型和值

c/c++中定义一个变量必须指明该变量的类型(以让编译器明确该变量占据的内存大小),但在Lua中却不需要该指明。Lua语言是一种动态类型语言,在这种语言中变量不需要定义类型,不过每个值还是带有其自身的类型信息。

Lua有8种基本类型:
nil(空)、number(数值)、boolean(布尔)、string(字符串)、userdata(用户数据)、function(函数)、thread(线程)、table(表)。函数type()可以获取一个值对应的类型名称:
在这里插入图片描述
nil和Boolean比较简单,下面简单介绍下这两种类型。Lua中的变量没有预定义的类型,任何变量可以包含任何类型的值:
在这里插入图片描述

使用未经初始化的全局变量也不会导致报错,当使用未初始化的全局变量时得到结果是nil;Lua使用nil来表示无效值,把nil赋给全局变量时Lua会回收该全局变量。不过,我们不提倡将一个变量用作不同类型,因为会降低代码的可读性。

Boolean类型的值只具有两个取值情况,即true和false,需要注意的是,Lua中将Boolean值false和nil外的所有值都视为真,零值和空字符串也被视为真。

Lua支持常见的逻辑运算符:and、or和not。and的运算结果是:若表达式的第一个操作数为“false”则返回第一个操作数,否则返回第二个操作数;or的运算结果是:如果表达式的第一个操作数不为false则返回第一个操作数,否则返回第二个操作数。例如:
在这里插入图片描述

跟c/c++类似,Lua的and和or也支持短路原则,即只有在必要时才对第二个操作数进行求值。

not运算符永远返回Boolean类型的值:
在这里插入图片描述
其他类型,下文总结。

参考书籍:《Lua程序设计》(Roberto lerusalimschy著)

本文摘自公众号Linux开发者札记。如果觉得本文对你有点用处,欢迎关注。

  • 19
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
开发Lua语言的PDF是一个可行的任务。首先,Lua是一种轻量级、高效的脚本语言,其设计的初衷是作为嵌入式脚本语言使用。虽然它的主要应用领域是游戏开发和嵌入式系统,但它也广泛用于其他领域,如Web应用、科学计算等。因此,开发Lua语言的PDF可以为Lua用户提供便捷的文档和参考资料。 要开发Lua语言的PDF,首先需要一个合适的PDF生成库。Lua提供了许多库和工具,可以用于PDF生成。例如,使用类似LuaTeX这样的工具,可以将Lua代码嵌入到TeX文档中,并通过指令生成PDF文件。此外,还有其他基于Lua的库,如luapdf、Lua-gnome等,也可用于开发Lua语言的PDF。 在开发Lua语言的PDF时,应考虑以下几个方面。首先,提供Lua语言的基础知识和语法介绍,以帮助初学者了解Lua的基本概念和用法。其次,应提供示例代码和实践案例,以帮助用户更好地理解Lua语言的应用。还可以提供一些高级特性和技巧,以帮助开发者提升Lua编程技能。 开发Lua语言的PDF还应考虑不同版本和扩展的兼容性。Lua语言在不同版本和扩展中可能存在一些差异,需要在文档中明确说明。同时,应提供相关的参考文献和链接,以便用户深入了解Lua语言的更多细节。 总而言之,开发Lua语言的PDF可以为Lua开发者提供一个全面而方便的学习和参考资源。通过提供基础知识、示例代码和高级技巧,开发者可以更好地掌握Lua语言的应用。此外,考虑到不同版本和扩展之间的兼容性,也要提供相关的参考文献和链接,以便用户进一步深入学习Lua语言的各个方面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值