lua介绍
Lua 是一种轻量级、高效、可扩展的脚本编程语言。它由巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)的一个研究小组于1993年开发而成。Lua 的设计目标是提供一个简单、可嵌入和可扩展的脚本语言,用于嵌入到其他应用程序中,或用于独立开发脚本驱动的应用程序。
以下是一些关于 Lua 的特点和用途:
简洁和易学:Lua 的语法简洁明了,易于学习和使用。它采用了类似于 Pascal 的块结构和词法作用域,并提供了一组简单而强大的语言构造。
轻量级和高效:Lua 的执行引擎非常轻量级,具有快速的解释执行速度和低内存占用。这使得 Lua 成为嵌入式系统和资源受限环境中的理想选择。
可嵌入性:Lua 可以轻松嵌入到其他应用程序中作为脚本语言使用。许多游戏引擎和应用程序框架都集成了 Lua,允许开发人员使用 Lua 进行自定义脚本编程。
可扩展性:Lua 提供了强大的扩展机制,允许开发人员通过编写 C/C++ 扩展模块来扩展 Lua 的功能。这种扩展性使得 Lua 能够与现有系统和库进行无缝集成。
多领域应用:Lua 在游戏开发、嵌入式系统、网络应用、脚本驱动的工具开发和配置文件等领域得到广泛应用。它还被广泛用于游戏脚本编程、服务器端脚本编程和快速原型开发等方面。
总的来说,Lua 是一种灵活、简洁且功能强大的脚本编程语言,适用于各种应用场景。
安装lua
windows安装
下载 lua : https://github.com/rjpcomputing/luaforwindows/releases
windwos版本,下载打开后一直点next即可安装完成,完全傻瓜式;
ubuntu安装
# 下载源码
wget http://www.lua.org/ftp/lua-5.4.4.tar.gz
# 解压
tar xzvf lua-5.4.4.tar.gz
#进入目录
cd lua-5.4.4/
# 编译
root@PAw9033927:~/lua-5.4.4# make all
make[1]: Entering directory '/root/lua-5.4.4/src'
Guessing Linux
make[2]: Entering directory '/root/lua-5.4.4/src'
make all SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl"
make[3]: Entering directory '/root/lua-5.4.4/src'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/root/lua-5.4.4/src'
make[2]: Leaving directory '/root/lua-5.4.4/src'
make[1]: Leaving directory '/root/lua-5.4.4/src'
# 安装
root@PAw9033927:~/lua-5.4.4# make install
cd src && mkdir -p /usr/local/bin /usr/local/include /usr/local/lib /usr/local/man/man1 /usr/local/share/lua/5.4 /usr/local/lib/lua/5.4
cd src && install -p -m 0755 lua luac /usr/local/bin
cd src && install -p -m 0644 lua.h luaconf.h lualib.h lauxlib.h lua.hpp /usr/local/include
cd src && install -p -m 0644 liblua.a /usr/local/lib
cd doc && install -p -m 0644 lua.1 luac.1 /usr/local/man/man1
# 查看安装结果, 如果没有反应,将当前bash窗口关掉在重新打开一个新的bash窗口,然后再输入以下命令
root@PAw9033927:~/lua-5.4.4# lua -v
Lua 5.4.4 Copyright (C) 1994-2022 Lua.org, PUC-Rio
第一个hello world
创建一个 main.lua 文件,内容如下
print("hello world)
执行lua
C:\Program Files (x86)\Lua\5.1\lua.exe main.lua
在idea 上运行lua
先安装lua插件
在创建工程时,就会看到lua的选项
给lua工程起个名称
创建完成后如下图
新建lua文件
代码写好后,首次运行需要做一些配置
配置信息如下
运行后如下图
lua 基础语法
print 控制台输出
print("hello world")
基本数据类型
-- 数值
local num = 1 -- number
local num = 1.0009999 -- number
-- 字符串
local str = "hello" -- string
-- 布尔
local bool = false -- boolean
-- 表,用来表示数组、map和 object
local bool = {"1","2"} -- table
-- 默认情况下是nil值
local nil_var = nil -- nil 表示无效的值,和java的null 有区别,相当于java的false
local invalid_var -- 当一个变量未赋值,它的默认值就是 nil
type 函数,输出数据类型
print(type("i love you")) -- string
print(type(false)) -- boolean
print(type(nil)) -- nil
print(type(1)) -- number
print(type(1.111)) -- number
print(type(type)) -- function
if语法
local var =true
if var then
print("条件为真")
end
if语法注意事项
在 Lua 中,只有 nil 和 false 为假,其他都为真,包括 0 和空字符串也为真。
这种判断方式和很多常见的开发语言并不一致,所以,为了避免在这种问题上出错,可以显式地写明比较的对象,比如下面这样:
local a = 0
if a == false then
print("true")
end
if else
if false then
print("条件为真")
else
print("条件为假")
end
if elseif
local ifA = 21;
if ifA == 1 then
print("为1")
elseif ifA == 2 then
print("为2")
elseif ifA == 3 then
print("为4")
else
print("啥也不是")
end
while 循环
while判断条件为ture时会一直执行do循环体的语句
local num = 0;
while (num < 20)
do
print("current num"..num)
num =num+1
end
打印结果如下
current num0
current num1
current num2
current num3
current num4
current num5
current num6
current num7
current num8
current num9
current num10
current num11
current num12
current num13
current num14
current num15
current num16
current num17
current num18
current num19
for循环
-- for循环
-- i=1 : 声明变量
-- 10: i只要不超过10,就会一直执行do循环体的语句,
-- 2: i每次递增的数量
for i = 1, 10 ,2
do
print("i的值为"..i)
end
打印结果如下
i的值为1
i的值为3
i的值为5
i的值为7
i的值为9
repeat ..until() 满足条件结束
local c = 1
repeat
print("c的值:"..c)
c = c+1
until(c<10) -- 当条件为true时结束循环,否则一直执行循环体的内容
function 函数
function add(a,b)
return a + b
end
-- 调用函数
print(add(1,2))
拼接
-- 两个点 .. 表示拼接
print("hello".." world!!!!")
local age = 6
print("我已经"..age.."岁了")
不能拼接nil值,会报错,比如以下代码
local nil_con = nil
print("nil_con的值为:"..nil_con)
报错信息
C:\Program Files (x86)\Lua\5.1\lua.exe: Main.lua:114: attempt to concatenate local 'nil_con' (a nil value)
stack traceback:
Main.lua:114: in main chunk
[C]: ?
table 表
local table = {} -- 初始化表
table[1] = 1 --给表赋值
table["key"] = "val"
-- 表取值
print("1的位置值为:"..table[1])
print("key的位置值为:"..table["key"])
--print("key1的位置值为:"..table["key1"]) -- 获取一个不存在的值会报错
-- 移除引用
table = nil
--print("1的位置值为:"..table[1])-- 因为上面已经移除了表的引用,在这里取值会报错
module 模块
模块相当于一个封装库, 也可以理解为是java的一个class,
从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度
新建一个模块 module.lua
-- 定义一个名为module的模块
module = {}
-- 定义一个常量
module.constant = "this is constant"
-- 定义私有函数,只能在内部调用
local function private_func(a)
print("调用了私有函数"..a)
end
-- 定义一个函数
function module.fun(a)
print("a的值为:"..a)
private_func(a)
end
-- 一定要return出去,否则其他地方无法调用
return module
模块使用
在另一个文件中,使用 require 引入模块,以下2种引入方式都可以
require("module")
require "module"
调用模块成员
-- 调用模块的函数
module.fun("yexindong")
-- 打印模块的常量
print(module.constant)