Lua环境搭建和常识(二)
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])
- 原文作者:生如夏花
- 原文链接:https://blduan.top/post/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/lua/lua%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E5%92%8C%E5%B8%B8%E8%AF%86/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。