跳至主要內容

lua

Mr.Si大约 7 分钟lua介绍lua

须知

本站只是简单介绍一下lua基础,具体入门还是看大佬教程吧,重点还是关注我自己的项目问题。

lua

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,比如我们的主角unreal engine

头像
跟BABA一起念 Lua/'lua/(噜啊)

脚本式编程

我们可以将 Lua 程序代码保存到一个以 lua 结尾的文件,并执行。
如:test.lua,该模式称为脚本式编程。

print("Hello World!")
头像
这里的print是内建函数,有点类似cpp中的std标注库中的函数。

lua注释

  1. 单行注释用:
--单行注释
  1. 多行注释:
--[[
多行注释
多行注释
--]]

lua保留关键字

关键词描述关键词描述
and逻辑与break退出循环
do开始一个块else备用条件
elseif备用条件end结束块
false布尔假值for循环遍历范围
function定义函数if条件语句
in在范围内local定义本地变量
nil表示不存在not逻辑非
or逻辑或repeat循环直到
return从函数返回then条件为真时的块
true布尔真值until循环结束条件
whileWhile 循环goto跳转到标签
头像
记不住,根本记不住。

lua变量

类型示例描述
全局变量默认情况下总是全局变量可以在任何地方被访问和修改。想删除一个全局变量,只需要将变量赋值为nil。
局部变量local b = 5仅在声明它的作用域内可见和访问。
头像
BABA多一句,这里不是null是nil

lua常量

在Lua中,没有明确的语法用于定义常量,如在其他编程语言中使用 const 或 final 关键字。
然而,通常通过约定俗成的方式来模拟常量的概念。
在Lua中,使用全大写字母表示的变量名通常被视为常量,表示这些变量的值不应该被修改。

-- 定义常量
MAX_VALUE = 100
PI = 3.14

-- 使用常量
local radius = 5
local area = PI * radius * radius

-- 尝试修改常量(虽然不会报错,但是不是推荐的做法)
MAX_VALUE = 200

lua数据类型

数据类型描述
nil只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean包含两个值:false和true。
number表示双精度类型的实浮点数。
string由一对双引号或单引号来表示。
function由 C 或 Lua 编写的函数。
userdata表示任意存储在变量中的C数据结构。
thread表示执行的独立线路,用于执行协同程序。
table在 Lua 里,table 的创建是通过"构造表达式"来完成,
最简单构造表达式是{},用来创建一个空表。也写成表格。

lua循环语句

for

lua
--Lua 编程语言中数值 for 循环语法格式:
--其中exp3对标 步长默认是1,默认可以不写
for var=exp1,exp2,exp3 do  
    <执行体>  
end  

while

lua
i = 1
while (i < 10) do
    print(i)
    i = i + 1
end
头像
可以理解成{}代码块用do end来表示。

repeat...until

lua
i = 1
repeat
    print(i)
    i = i + 1
until (i > 10)
头像
for 和 while 循环的条件语句在当前循环执行开始时判断
而 repeat...until 循环的条件语句在当前循环结束后判断。

lua条件语句

if

lua
--[ 0 为 true ]
if(0)
then
    do
    print("0 为 true")
    end
    --这里的do end可以省略。
end
头像
可以理解成{}代码块用then end来表示。

lua函数

lua
optional_function_scope function function_name( argument1, argument2..., argumentn)
    function_body
    return result_params_comma_separated
end
  • optional_function_scope: 该参数是可选的指定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local。
  • function_name: 指定函数名称。
  • argument1, argument2, argument3..., argumentn: 函数参数,多个参数以逗号隔开,函数也可以不带参数。
  • function_body: 函数体,函数中需要执行的代码语句块。
  • result_params_comma_separated: 函数返回值,Lua语言函数可以返回多个值,每个值以 逗号隔开。
-- 定义一个返回多个值的函数
function getMultipleValues()
    return 10, "hello", true
end

-- 调用函数并接收返回值
local num, greeting, flag = getMultipleValues()

-- 打印返回值
print(num)       -- 输出 10
print(greeting)  -- 输出 hello
print(flag)      -- 输出 true
头像
1.这里的函数定义特性更像JS中的function name (){} ,因为变量类型是自动的。
2.不同于C++的auto, auto 是一种推导机制,一旦赋值特定类型,就不能再改变。

可变参数

Lua 函数可以接受可变数目的参数,和 C 语言类似
在函数参数列表中使用三点 ... 表示例如:

function add(...)  
local s = 0  
  for i, v in ipairs{...} do   --> {...} 表示一个由所有变长参数构成的数组  
    s = s + v  
  end  
  return s  
end  
print(add(3,4,5,6,7))  --->25

lua运算符

类别LuaC++
字符串连接..+ 或 append()
逻辑与and&&
逻辑或or|
逻辑非not!
自增++
自减--
三元条件condition and a or bcondition ? a : b
条件表达式condition and a or bcondition ? a : b
按位与&
按位或|
按位取反~
左移<<
右移>>
取余%%
头像
记不住,根本记不住。咱们只需记一个特殊的就行了。

特殊的LUA中有个一元运算符#,表示取字符串长度.

local str = "Hello, Lua!"
local len = #str
print(len) -- 输出:12

lua字符串

1. 单引号

local str1 = 'This is a string.'

2. 双引号

local str = "Hello, "
str = str .. "World!"  -- 创建一个新的字符串并将其赋值给str
print(str)  -- 输出 "Hello, World!"

单双引号它们的功能是相似的,可以根据个人偏好来选择使用哪种引号。
主要区别在于在字符串内部的引号是否需要转义。


头像
你在说啥?单引号和双引号区别:
  1. 转义字符:

    • 在双引号字符串中,可以直接使用单引号,而不需要转义。反之亦然。
    • 例如,在双引号字符串中,可以写 "It's a string" 而不需要转义单引号。
  2. 字符串内嵌:

    • 可以在单引号字符串中直接使用双引号,反之亦然。
    • 例如,在单引号字符串中,可以写 'This is a "string" inside'

示例:

local singleQuoted = 'This is a single-quoted string'
local doubleQuoted = "This is a double-quoted string"
local mixedQuotes = 'You can use "double quotes" inside single quotes'

3. [[ 与 ]] 间的一串字符。

local multilineString = [[
This is a multiline string1.
This is a multiline string2.
This is a multiline string3.
]]

print(multilineString)

lua数组

  • 在 Lua 中,数组不是一种特定的数据类型,而是一种用来存储一组值的数据结构。
  • 实际上,Lua 中并没有专门的数组类型,而是使用一种被称为 "table" 的数据结构来实现数组的功能。
  • 要计算数组的长度(即数组中元素的个数),可以使用 # 操作符
-- 创建一个数组
local myArray = {10, 20, 30, 40, 50}

-- 访问数组元素
print(myArray[1])  -- 输出 10
print(myArray[3])  -- 输出 30

-- 计算数组长度
local length = #myArray
print(length) -- 输出 5

TODO

未完待续。。。

参考链接