Lua开发环境的搭建以及如何执行,Lua中代码块的定义,以及如何将直接执行Lua脚本。

Lua开发环境搭建

下面是在Ubuntu22.04上搭建Lua开发环境的方法步骤:

$curl -R -O http://www.lua.org/ftp/lua-5.4.4.tar.gz
$tar zxf lua-5.4.4.tar.gz
$cd lua-5.4.4
$make all test$curl 

或者执行sudo apt install lua-5.4

运行方式

交互模式

不带任何参数执行lua命令可以进入到交互模式。如下所示:

$ lua
Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> print("Hello,world")
Hello,world
>

此时输入的每行命令都会立即被执行。

退出交互模式有两种方式,分别是执行Ctrl-D和调用os.exit()

可以在Lua的交互模式输入表达式,Lua会直接计算它们的值。

在交互模式下,Lua会检测输入的每行命令是否为完整的块。如果不是完整块,Lua则会等待更多输入直到成为完整块。 但是这种方式并不如直接写道文件然后通过lua调用方便。

Lua在进入交互模式之前可以通过-i参数指定一个文件,并在执行完该文件之后进入到交互模式。

Lua在交互模式下可通过调用dofile来立即执行文件,如下示例:

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

function twice(x)
    return 2.0 * x
end

执行结果如下:

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

这种方式可以用来调试代码。

执行文件

可以通过lua后面直接带文件名来执行对应的脚本。如下所示:

hello.lua内容如下:

print("Hello, world")

factorial.lua内容如下:

-- define a factorial function
function fact(n)
    if n == 0 then
        return 1
    else
        return n * fact(n-1)
    end
end

print("enter a number:")
a = io.read() -- read a number
print(fact(a))

执行结果如下:

$ lua hello.lua
Hello, world
$ lua factorial.lua
enter a number:
10
3628800

脚本文件

当使用Lua解释器加载脚本文件时,如果脚本第一行是以#开头,解释器会自动忽略第一行。

这种方式在POSIX系统中能够将Lua作为脚本解释器。脚本的第一行内容如下:

#!/usr/bin/lua

此时可以直接运行脚本,不必显式调用Lua解释器。

示例如下:

hello.lua的内容如下:

#!/usr/bin/lua
print("Hello, world")

执行结果如下:

$ ./hello.lua
Hello, world

块的定义

在Lua中,把一个脚本文件或者交互模式下的单独一行都成为块。

块有一系列命令组成。

块既可以是单行表达式,也可以是一系列表达式和函数定义的混合。 由于Lua也被用作数据描述,因此几兆字节大的块也不是不可能的。

注释方式

单行注释由--开始直到行尾。

多行注释由--[[开始,直到]]终止。

一个通用的注释方式是以--[[在单行开始,--]]在单行结束。取消注释时只需要在开始位置增加-

变量说明

命名方式

和其他语言的命名方式一致,都是以字母、数字、下划线的组合来命名,并且数字不能作为开头,并且区分大小写。

保留字段

目前这些字段and, break, do, else, elseif, end, false, for, function, goto, if, in, local, nil, not, or, repeat, return, then, true, until, while为保留字段,不能用作变量名。

全局变量

全局变量不需要声明,可以直接使用。

访问未初始化的变量也不会出错,只会返回nil。如果给一个全局变量赋值nil,和初始化的变量效果一致。

Lua不区分初始化为nil和未初始化的变量。分配为nil后,Lua会回收该变量占用的内存空间。

命令行参数

lua的使用方式如下:lua [options] [script [args]]。可以看到script之后的内容是命令行参数。

lua指令说明
-e用于在命令行执行代码
-l加载库
-i使lua执行完其他参数之后进入交互模式

示例如下:

$ lua -e "print(math.sin(12))"
-0.53657291800043

$ lua -i -llib1 -e "x=10"
Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> print(x)
10
> print(norm(3,4))
5.0
> print(twice(3))
6.0
> os.exit()

获取命令行参数示例如下:

$ lua -e "sin=math.sin" print_command_arg.lua a b
lua
-e
sin=math.sin
print_command_arg.lua
a
b
$ cat print_command_arg.lua
print(arg[-3])
print(arg[-2])
print(arg[-1])
print(arg[0])
print(arg[1])
print(arg[2])