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

news2024/10/7 10:15:54

文章目录

  • 💨更多相关知识👇
    • 一、Lua 的流程控制
      • 🔸if语句
        • 🌟代码演示
      • 🔸if...else 语句
        • 🌟代码演示
      • 🔸if...elseif...else 语句
    • 二、#的作用
    • 三、table的创建方式
    • 四、table表的常用方法使用
      • 🔹table.concat(table, sep,start, end)
      • 🔹table.insert (table,[pos] ,value)
      • 🔹table.remove (table [pos])
      • 🔹table.sort (table [comp])
    • 五、函数
      • ⚡函数调用的注意事项
    • 六、多返回值
    • 七、可变长参数
      • 🌶️可变长参数的遍历方式1(表遍历)
      • 🌶️可变长参数的遍历方式2(select()函数)
  • 作者:KJ.JK

💨更多相关知识👇

💖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,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

标记肽Suc-AAPI-pNA、72682-77-0

标记肽Suc-AAPI-对硝基苯胺编号: 184433 中文名称: 标记肽Suc-AAPI-对硝基苯胺 英文名: Suc-Ala-Ala-Pro-Ile-pNA CAS号: 72682-77-0 单字母: Suc-AAPI-pNA 三字母: Suc-Ala-Ala-Pro-Ile-pNA 氨基酸个数: 4 分子式: C27H38O9N6 平均分子量: 590.63 精确分子量: 590.27 等电点(P…

使用MobaXterm tunneling访问集群(服务器)jupyter notebook

应用场景 想要在本地计算机C上使用高性能服务器上的计算节点运行jupyter notebook相关的代码。 高性能服务器上通常只有一个公网ip用于账户登陆管理,但有多个计算节点,需要使用公网IP通过SSH方式登入管理节点A,并使用SSH二次登陆计算节点B&…

CKKS同态加密方案初步学习

如论文标题所示,CKKS允许复数和实数运算,是一个近似精度计算的方案,也就是解密出来的明文和加密之前的明文不会完全一致。也就是采用丢失部分精度来换取较高的效率。 CKKS的核心是把加密噪声视为近似计算误差的一部分,也就是解密出…

Python项目一:pygname

1.安装pip install pygame 2.加载模块初始化:开始 import sys import pygamepygame.init() #初始化3.创建窗口 3.1pygame .display模块 作用:创建游戏窗口 常见的内置方法: 方法作用 pygame。display.init() 初始化display模块p…

C++11标准模板(STL)- 算法(std::partial_sort)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 排序一个范围的前 N 个元素…

阿里巴巴最新总结「百亿级别并发设计手册」GitHub收获70K标星

随着淘宝购物节和抖音直播平台带货的火热&#xff0c;大批促销活动涌现&#xff0c;「秒杀」这个词也越来越频繁地出现在我们的生活里。 除了那些头部的电商公司&#xff0c;某多、某东&#xff0c;还有各种街、某会、某品等&#xff0c;甚至是一些老牌的传统企业&#xff0c;…

Android持久化技术,好内存不如烂存储

Android持久化技术&#xff0c;好内存不如烂存储前言六、Android持久化技术&#xff0c;好内存不如烂存储6.1 持久化技术介绍6.2 简单文件存储方案6.3 SharedPreferences存储方案6.3.1 获取SharedPreferences对象的三种方式6.3.2 使用SharedPreferences对象存储和读取数据6.4 S…

Model Fusion of Heterogeneous Neural Networks via Cross-Layer Alignment论文阅读

论文地址点这里 一. 介绍 本文是针对异构的网络融合技术&#xff0c;是基于上一篇OTFusion的论文进行的工作&#xff0c;解决了神经元关联问题。当所有的网络都具有相同的架构时&#xff0c;OTFusion比普通平均算法有明显的改进。与其他基于平均的模型融合方法相比&#xff0…

如何制作一个实时在线显示评论

通过循环容器及数据表功能&#xff0c;制作一个发送评论实时显示的功能 效果展示 具体步骤 制作评论背景 制作评论样式 制作一个发送评论输入框 制作一个发送按钮 创建评论数据表 添加获取评论事件 创建发送评论触发器 数据绑定与设置 步骤分解 制作评论背景 拖拽 循环容器 到…

Go基础学习【2】

文章目录一&#xff1a;数组二&#xff1a;map集合三&#xff1a;包四&#xff1a;结构体一&#xff1a;数组 1.命名 var arrAge [5]int{1,2,3,4,5} var arrAge […]int{1,2,4,5,6} var arrAge [5]string{3:“sfd”,5:“asdf”} 2.传递 通过传递数组的指针 和 使用数组的切片…

[go学习笔记.第十六章.TCP编程] 2.项目-海量用户即时通讯系统

一.项目介绍 1.项目开发流程 需求分析->设计阶段->编码实现->测试阶段->实施阶段 2.需求分析 (1).用户注册 (2).用户登录 (3).显示在线用户列表 (4).群聊(广播) (5).点对点聊天 (6).离线留言 3.示意图 4.项目开发前技术准备 项目要保存用户信息和消息数据,因此需…

【Vue】vue项目用qrcodejs2生成带log的二维码图片,vue生成二维码图片中间带log,自定义log

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、安装qrcodejs2二、在页面中使用1.引入…

英国Paper写作思路和精髓如何了解?

第一学期即将结束&#xff0c;为了能帮助更多英国留学生顺利完成Paper&#xff0c;增加对英国Paper写作的理解&#xff0c;取得高分。本文小编为大家分享英国Paper写作的思路和精髓&#xff0c;帮助自己修改提升Paper质量。 The first semester is coming to an end.In order t…

flutter AnimatedSwitcher 动画切换过渡组件 跑马灯动画封装

flutter AnimatedSwitcher 动画切换过渡组件前言一、AnimatedSwitcher 简介二、AnimatedSwitcher 的简单使用三、AnimatedSwitcher 自定义跑马灯动画四、SlideTransitionX 的封装总结前言 本篇文章将记录 AnimatedSwitcher 过渡组件&#xff0c;这个组件动画是一个新的小部件来…

制作一个简单HTML宠物猫网页(HTML+CSS)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

在 Spring Boot中配置日志

Spring Boot 在引擎盖下使用Apache Commons Logging。但是&#xff0c;它允许您选择所需的日志记录库。让我们来看看使用 Spring Boot 时的一些配置和最佳实践。 目录 概述简单日志记录示例配置日志记录 更改日志级别将日志写入文件在 Spring 引导中更改日志记录模式对日志条…

基于小波域的隐马尔可夫树模型的图像去噪方法的matlab实现代码

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 为适应图像的空域非平稳变化, 提出了一种基于小波域分类隐马尔可夫树(CHMT)模型的图像去噪方法.该模型中,图像在每一尺度每一子带的小波系数均被分成C组以突出其空域非平稳变化 的特征,这…

MySQL有哪些锁

这次&#xff0c;来说说 MySQL 的锁&#xff0c;主要是 Q&A 的形式&#xff0c;看起来会比较轻松。 在 MySQL 里&#xff0c;根据加锁的范围&#xff0c;可以分为全局锁、表级锁和行锁三类。 全局锁 全局锁是怎么用的&#xff1f; 要使用全局锁&#xff0c;则要执行这条命…

彻底搞明白概率论:事件间的关系与运算;频率与概率

文章目录事件间的关系事件间的运算事件间的运算法则概率描述性定义统计性定义频率频率的性质频率是否能够作为概率呢&#xff1f;公理化定义概率的重要性质事件间的关系 注意互斥关系和对立关系&#xff1a; 互斥关系是&#xff1a;只要 A,BA,BA,B 不同时发生&#xff08;不存在…

山东菏泽家乡网页代码 html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…