【Lua基础 第4章】Lua的流程控制、#的作用、table的创建方式、table表常用方法、函数、多返回值、可变长参数

简介: Lua的流程控制、#的作用、table的创建方式、table表常用方法、函数、多返回值、可变长参数

💨更多相关知识👇

💖Spring中的创建对象的三种方式、第三方资源配置管理详细描述及使用(XML版完结篇)

💖Spring中的bean的配置、作用范围、生命周期详细描述及使用(XML版上篇)

💖Spring中的依赖注入、setter与构造器注入、自动装配与集合注入详细描述及使用(XML版中篇)


🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈
 
🍂个人博客首页: KJ.JK
 
💖系列专栏:JavaEE进阶教程系列

一、Lua 的流程控制

语句 描述
if 语句 if 语句 由一个布尔表达式作为条件判断,其后紧跟其他语句组成
if...else 语句 if 语句 可以与 else 语句搭配使用, 在 if 条件表达式为 false 时执行 else 语句代码
if 嵌套语句 你可以在if 或 else if中使用一个或多个 if 或 else if 语句

🔸if语句

"语法:"
    if(布尔表达式)
      then
          --[ 在布尔表达式为 true 时执行的语句 --]
      end
         -- false和nil为假,true 和非nil为真
         
-- 要注意的是Lua中 0 为 true

请添加图片描述


🌟代码演示

a=50
b=40
if(a>b)
then
print("a比b大")
end

请添加图片描述


🔸if...else 语句

"语法:"
        if(布尔表达式)
           then
             --[ 布尔表达式为 true 时执行该语句块 --]
           else
             --[ 布尔表达式为 false 时执行该语句块 --]
        end

请添加图片描述


🌟代码演示

a=50
b=400
if(a>b)
then
print("a比b大")
else
print("b比a大")
end

请添加图片描述


🔸if...elseif...else 语句

"语法:"
     if( 布尔表达式 1)
       then
        --[ 在布尔表达式 1 为 true 时执行该语句块 --]
     elseif( 布尔表达式 2)
       then
        --[ 在布尔表达式 2 为 true 时执行该语句块 --]
     elseif( 布尔表达式 3)
       then
        --[ 在布尔表达式 3 为 true 时执行该语句块 --]
     else
        --[ 如果以上布尔表达式都不为 true 则执行该语句块 --]
     end

二、#的作用

       "#号得到的是用整数作为索引的最开始连续部分的大小,如果遇到值为nil并且nil在table的最后,那么就会结束计算,直接返回"
--------------------------------------------------------------------------------------------------------------------------------

"例子":

     a={10,"abc",200,nil,58,nil}
     print(#a)
     
     b={55,nil,20,nil,20}
     print(#b)
     
     a1={10,20,30,nil,20,nil}
     print(#a1)

请添加图片描述


三、table的创建方式

a={} -- 创建一个空白的表

b={1,2,5,68} -- 创建一个数字为下标的表

c={
a1=1,
b1="1254",
c=function() end,
} -- 创建一个字符串为下标的表
print(c.b1)

请添加图片描述


四、table表的常用方法使用


🔹table.concat(table, sep,start, end)

"table.concat(table, sep, start, end): 把表里面的元素进行拼接"

参数含义:

table: 需要拼接的表

sep: 以什么来进行分隔拼接

start:拼接的起始位置

end:拼接的结束位置
--------------------------------------------------------------------------------------------------------------------------------

tableset={"jksada","bdsada","cdas"}
print(table.concat(tableset)) -- jksadabdsadacdas
print(table.concat(tableset,",")) -- jksada,bdsada,cdas
print(table.concat(tableset,",",2,3)) --bdsada,cdas

请添加图片描述


🔹table.insert (table,[pos] ,value)

"table.insert (table, [pos,] value):在表中插入元素,如果不指定位置,默认插入到末尾"

参数含义:

table: 需要插入的表

pos: 插入的位置,可写可不写,不写默认插入到末尾

value: 插入的值

--------------------------------------------------------------------------------------------------------------------------------

tableset2={"abc","de","250st"}
print("插入前:")
for i, v in ipairs(tableset2) do
print(i .. ":" ..v)
end

print("--------------------------------------------------------")

print("插入后:")
table.insert(tableset2,"我是插入的元素")
for i, v in ipairs(tableset2) do
print(i..":".. v)
end

print("--------------------------------------------------------")

print("插入指定的位置:")
table.insert(tableset2,3,"我是插入指定的元素")
for i, v in ipairs(tableset2) do
print(i..":".. v)
end

请添加图片描述


🔹table.remove (table [pos])

"table.remove (table [, pos]): 删除元素,如果不给位置,默认删除最后一个"

参数含义:

table: 需要删除的表

pos: 指定删除的位置,可写可不写,不写默认删除最后一个

--------------------------------------------------------------------------------------------------------------------------------

tableset2={12,50,87,40}
print("删除前:")
for i, v in ipairs(tableset2) do
print(i ..":"..v)
end
print("-------------------------------------------------------------")

print("删除后:")
table.remove(tableset2)
for i, v in ipairs(tableset2) do
print(i ..":"..v)
end

print("-------------------------------------------------------------")

print("删除指定位置后:")
table.remove(tableset2,2)
for i, v in ipairs(tableset2) do
print(i ..":"..v)
end

请添加图片描述


🔹table.sort (table [comp])

"table.sort (table [, comp]):对表进行升序排序"
--------------------------------------------------------------------------------------------------------------------------------

tableset2={50,2,3,4,87}
table.sort(tableset2)
for i, v in ipairs(tableset2) do
print(v)
end

请添加图片描述


五、函数

"定义格式:"
optional_function_scope function function_name( argument1, argument2,
argument3..., 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 max(num1, num2)
if (num1 > num2) then
result = num1;
else
result = num2;
end
return result;
end
-- 调用函数
print("两值比较最大值为 ",max(10,4))
print("两值比较最大值为 ",max(5,6))

⚡函数调用的注意事项

"1.一般情况下,函数调用时需要带上圆括号(不论函数是否带有参数"

------------------------------------------------------------------------------------------------------------------------------------------------

"2.当函数只有一个参数,且参数是字符串常量或者表构造器时,可以不使用圆括号"

          如: print "hello" 
          
------------------------------------------------------------------------------------------------------------------------------------------------
          
"3.面向对象风格的调用"

Lua语言也为面向对象风格的调用提供了一种特殊的语法,即"冒号调用操作符"
        o::foo(x)
        
------------------------------------------------------------------------------------------------------------------------------------------------

"4.调用参数个数与定义参数个数不一致"

"调用函数时传递的参数个数"可以与"定义函数时定义的参数个数不一致",

Lua会通过"抛弃多余参数"和"将不足的参数设为nil"的方式来调整参数的格式

如:

function f(a,b)
print(a,b)
end
f() -- nil nil
--不足的参数设为nil
f(3) -- 3 nil
f(3,4)
f(3,4,5) -- 抛弃多余的参数5

请添加图片描述


六、多返回值

"在return后列出要返回的值的列表即可返回多值"

如:

function maximum (a)
local mi = 1 -- 最大值索引
local m = a[mi] -- 最大值
for i,val in ipairs(a) do
if val > m then
mi = i
m = val
end
end
return m, mi
end
print(maximum({8,10,23,12,5}))

七、可变长参数

"Lua支持可变长参数函数,“可变长参数”是使用三个点(...)组成的可变长参数表达式"

如:
function add(...)
local s=0
for i, v in ipairs{...} do
s=s+v
end
return s
end
print(add(1,9,8,5))

请添加图片描述


🌶️可变长参数的遍历方式1(表遍历)

"要遍历可变长参数,可以使用表达式{...}将可变长参数放在一个表中"

"不过,如果可变长参数中包含无效的nil,那么{...}获得的表可能不再是一个有效的序列。此时,就没有办法在表中判断原始参数究竟是不是以nil结尾的"

--------------------------------------------------------------------------------------------------------------------------------

function foo(...)
a={...}
for i = 1, #a do
print(a[i])
end
end
foo("a","b",10)
print("----------------------------------")
foo("a","b",{"helloworld"},10)

请添加图片描述


🌶️可变长参数的遍历方式2(select()函数)

"select()函数的参数1决定了该函数的行为:"

     * select(n, …): 返回第n个参数后的所有参数
     
     * select('#', …): 返回可变参数的长度

请添加图片描述


作者:KJ.JK

文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

目录
相关文章
|
7月前
|
存储 C语言 图形学
C 函数中如何保存 Lua 的数据(1)
C 函数中如何保存 Lua 的数据(1)
93 0
|
存储 Java C语言
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
100 0
|
2月前
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
Lua的面向对象编程、协同线程与协同函数的概念和使用,以及Lua文件I/O操作的基本方法。
32 4
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
|
2月前
|
网络协议
Lua中实现异步HTTP请求的方法
Lua中实现异步HTTP请求的方法
|
2月前
|
数据可视化 开发者 索引
详解Wireshark LUA插件函数:function p_myproto.dissector(buffer, pinfo, tree)
在 Wireshark 中,LUA 插件通过 `function p_myproto.dissector(buffer, pinfo, tree)` 扩展协议解析能力,解析自定义应用层协议。参数 `buffer` 是 `PacketBuffer` 类型,表示原始数据包内容;`pinfo` 是 `ProtoInfo` 类型,包含数据包元信息(如 IP 地址、协议类型等);`tree` 是
74 1
|
7月前
|
数据采集 存储 数据安全/隐私保护
拓展网络技能:利用lua-http库下载www.linkedin.com信息的方法
本文介绍如何使用Lua和lua-http库抓取LinkedIn信息,强调了Lua在爬虫开发中的应用。通过配置亿牛云爬虫代理解决IP封锁问题,实现步骤包括安装库、配置代理、发送HTTP请求、解析响应及提取信息。提供的Lua代码示例展示了下载和存储LinkedIn信息的过程。实验成功展示了Lua爬虫的可行性,但也指出需考虑反爬虫策略以应对实际挑战。
拓展网络技能:利用lua-http库下载www.linkedin.com信息的方法
|
7月前
|
C语言 C++ 索引
C 函数中如何保存 Lua 的数据(2)
C 函数中如何保存 Lua 的数据(2)
81 1
[✔️]lua中的module函数
[✔️]lua中的module函数
220 0
|
6月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
229 0