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 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。