Lua学习(一)

news2024/12/23 21:02:00

lua基础学习

    • LUA 语言
      • 1. 什么是lua?
        • 1.1 准备工作
      • 2. 基本语法
        • 2.1 注释
        • 2.2 标识符
        • 2.3 关键字
        • 2.4 全局变量
      • 3. 数据类型
      • 4. 变量
        • 4.1 赋值语句
      • 5. 循环
        • 5.1 while循环
        • 5.2 for循环
        • 5.3泛型for循环
        • 5.4 repeat until 循环
        • 5.5 break 语句
      • 6. 流程控制
        • 6.1 if语句
        • 6.2 if else 语句
        • 6.3 if else if 语句

LUA 语言

1. 什么是lua?

lua 是轻量小巧的编程语言,其设计的目的就是为了嵌入到应用程序里面去。

从而为应用程序 提供扩展。

使用的是标准的c并以源码的方式对外开放

1.1 准备工作

首先下载lua -> lua官网 下载

到达官网之后点击 download

在这里插入图片描述

选择压缩文件,这里面的是源码需要我们编译。
在这里插入图片描述

在这里我使用的是linux系统。

  • 将压缩包传入到虚拟机我使用的是Xftp和Xshell 找到存放压缩包的目录
tar - zxvf lua-5.4.6.tar.gz
  • 解压之后就是到达有 makefile的文件夹
make linux
  • 到这里就基本完成了
  • make完成之后会生成两个exe文件分别是lua 和luac
  • 其中lua是可以直接执行lua 脚本的
  • luac则是将lua编译生成.out文件然后运行.out文件

在这期间我遇到了一个问题就是我没有make命令。只需要输入如下命令即可:

yum -y install gcc automake autoconf libtool make yum install gcc gcc-c++

2. 基本语法

2.1 注释

  • 单行注释
--
  • 多行注释(快捷键 一般为 ctrl + shift + ?)
--[[
 多行注释
 多行注释
 --]]

2.2 标识符

lua 可以使用_,数字,字母,表示变量但是不能使用特殊符号表示变量。下面都是正确的表示符表示。

mohd         zara      abc     move_name    a_123
myname50     _temp     j       a23b9        retVal

2.3 关键字

首先是关键字被lua 保留了 不能作为用户自定义的标示符。

andbreakdoelse
elseifendfalsefor
functionifinlocal
nilnotorrepeat
returnthentrueuntil
whilegoto

一般约定,以下划线开头连接一串大写字母的名字(比如 _VERSION)被保留用于 Lua 内部全局变量。

2.4 全局变量

默认情况下 变量都是全局的,局部的变量出现在方法中。

3. 数据类型

Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。

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

4. 变量

Lua 变量有三种类型:全局变量、局部变量、表中的域。

加上 local 的变量就是局部变量 只能作用于该文件

而如果在一个方法中定义了一个加local的变量那么这个变量只在这个方法中可见

a = 5               -- 全局变量
local b = 5         -- 局部变量

function joke()
    c = 5           -- 全局变量
    local d = 6     -- 局部变量
end

-- joke()  要先进行调用才可以直接使用
-- print(c,d) --5 nil  
print(c,d) -- nil nil 

4.1 赋值语句

site  = {}

site["key"] = "www.baidu.com"
print(site.key)
print(site["key"])
-- 当索引为字符串类型时的一种简化写法
-- 采用索引访问本质上是一个类似这样的函数调用
-- www.baidu.com
-- www.baidu.com

​ Lua 可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。

a,b =10,"dada"
print(a,b)
c,d,e,f=10
print(c,d,e,f)
--变量个数 > 值的个数             按变量个数补足nil
--变量个数 < 值的个数             多余的值会被忽略

5. 循环

5.1 while循环

在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true。

a=0
while(a < 10)
    do
    print("a的值是:",a)
    a = a+1
end

5.2 for循环

for var=exp1,exp2,exp3 do  
    <执行体>  
end 
var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 "执行体"。exp3 是可选的,如果不指定,默认为1for i = 20, 10,-2 do
	print(i)
end

5.3泛型for循环

泛型 for 循环通过一个迭代器函数来遍历所有值,类似 java 中的 foreach 语句。

a= {"one","two","three","four","five"}
for i, v in ipairs(a) do
    print(i,v)
end

5.4 repeat until 循环

for 和 while 循环的条件语句在当前循环执行开始时判断,而 repeat…until 循环的条件语句在当前循环结束后判断。

b =0
repeat
    print(b)
    b = b+1
until(b >10 )

5.5 break 语句

break 语句插入在循环体中,用于退出当前循环或语句,并开始脚本执行紧接着的语句

a = 10

--[ while 循环 --]
while( a < 20 )
do
   print("a 的值为:", a)
   a=a+1
   if( a > 15)
   then
      --[ 使用 break 语句终止循环 --]
      break
   end
end

6. 流程控制

6.1 if语句

流程控制语句通过程序设定一个或多个条件语句来设定。在条件为 true 时执行指定程序代码,在条件为 false 时执行其他指定代码。

--[ 0 为 true ]
if(0)
then
    print("0 为 true")
end

6.2 if else 语句

Lua if 语句可以与 else 语句搭配使用, 在 if 条件表达式为 false 时执行 else 语句代码块。

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


a =10
if(a >6)then
    print("我比6大")
else
    print("我比6小")
end

Lua认为false和nil为假,true 和非nil为真。要注意的是Lua中 0 为 true。

6.3 if else if 语句

if … else if…else 语句搭配使用, 在 if 条件表达式为 false 时执行 elseif…else 语句代码块,用于检测多个条件语句。

if( 布尔表达式 1)
then
   --[ 在布尔表达式 1 为 true 时执行该语句块 --]

elseif( 布尔表达式 2)
then
   --[ 在布尔表达式 2 为 true 时执行该语句块 --]

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

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

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

相关文章

数学建模:数据的预处理

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 文章目录 数据预处理数据变换数据清洗缺失值处理异常值处理 数据预处理 数据变换 常见的数据变换的方式&#xff1a;通过某些简单的函数进行数据变换。 x ′ x 2 x ′ x x ′ log ⁡ ( x ) ∇ f ( x k )…

ZLMediaKit 各种推拉流

1 用ffmpeg 推音视频流 ./ffmpeg -f dshow -i video"HP Wide Vision HD Camera" -f dshow -i audio"麦克风阵列 (Realtek High Definition Audio)" -rtbufsize 100M -max_delay 100 -pix_fmt yuv420p -tune zerolatency -c:v libx264 -crf 18 -s 1280x720…

java八股文面试[多线程]——synchronized锁升级过程

速记&#xff1a;偏向-轻量-重量 锁膨胀 上面讲到锁有四种状态&#xff0c;并且会因实际情况进行膨胀升级&#xff0c;其膨胀方向是&#xff1a;无锁——>偏向锁——>轻量级锁——>重量级锁&#xff0c;并且膨胀方向不可逆 一.锁升级理论. 在synchronized锁升级过程…

Kotlin学习之密封类

Kotlin中的密封类: kotlin中的密封类&#xff0c;用关键词Sealed修饰&#xff0c;且还有一个规定&#xff1a;Sealed类的子类应该是Sealed类的嵌套类&#xff0c;或者应该在与Sealed类相同的文件中声明。 当我们想定义一个有相同父类&#xff0c;但是有不同子类的时候&#xf…

面试中的系统设计:应对复杂问题的方法与技巧

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

巨人互动|游戏出海游戏出海的趋势如何

随着全球游戏市场的不断扩大和消费者需求的多元化&#xff0c;游戏出海作为游戏行业的重要战略之一&#xff0c;正面临着新的发展趋势。本文小编将讲讲游戏出海的趋势&#xff0c;探讨一下未来游戏出海的发展方向与前景。 巨人互动|游戏出海&2023国内游戏厂商加快“出海”发…

Linux命令查看CPU、内存、IO使用情况简单介绍

文章目录 1. CPU相关介绍1.1 物理CPU1.2 物理CPU内核1.3 逻辑CPU1.4 几核几线程1.5 CPU设计图 2. top 查看系统负载、CPU使用情况2.1 系统整体的统计信息2.2 进程信息2.3 top命令使用 3. lscpu 显示有关 CPU 架构的信息4. free 查看内存信息5. iostat 查看io信息 1. CPU相关介绍…

angular抛出 ExpressionChangedAfterItHasBeenCheckedError错误分析

当变更检测完成后又更改了表达式值时&#xff0c;Angular 就会抛出 ExpressionChangedAfterItHasBeenCheckedError 错误。Angular 只会在开发模式下抛出此错误。 在开发模式下&#xff0c;Angular 在每次变更检测运行后都会执行一次附加检查&#xff0c;以确保绑定没有更改。这…

一台服务器上部署 Redis 伪集群

哈喽大家好&#xff0c;我是咸鱼 今天这篇文章介绍如何在一台服务器&#xff08;以 CentOS 7.9 为例&#xff09;上通过 redis-trib.rb 工具搭建 Redis cluster &#xff08;三主三从&#xff09; redis-trib.rb 是一个基于 Ruby 编写的脚本&#xff0c;其功能涵盖了创建、管…

经纬恒润荣获吉利汽车“最佳价值贡献”奖

8月18日&#xff0c;以“全面向新 共创共赢”为主题&#xff0c;吉利汽车在宁波成功举行2023年电子电器核心供应商恳谈会。经纬恒润凭借在项目合作上持续创新、高效协同等优异表现&#xff0c;获得“最佳价值贡献”奖项。 作为国产汽车代表性品牌之一&#xff0c;吉利汽车积极推…

从Matrix-ResourceCanary看内存泄漏监控

作者&#xff1a;小海编码日记 不同于LeakCanary&#xff0c;在Matrix中&#xff0c;主要是通过Resource Canary来监控内存泄漏问题的&#xff0c;且监听的泄漏对象只支持Activity&#xff0c;官方说明如下&#xff1a; 结合分析LeakCanary的经验可知&#xff0c;要实现Activit…

BananaPi BPI-6202工业控制板全志科技A40i、24V DC输入、RS485接口

Banana Pi BPI-6202“嵌入式单板计算机”采用工业级全志A40i四核Cortex-A7处理器&#xff0c;工业温度范围和长生命周期&#xff0c;2GB DDR3&#xff0c;8GB eMMC闪存&#xff0c;M.2 SATA插槽等。 这是自 Banana Pi去年推出Banana Pi BPI-M2 Ultra SBC 和BPI-M2 Berry以来&am…

机械臂+2d相机实现复合机器人定位抓取

硬件参数 机械臂&#xff1a;艾利特 相机&#xff1a;海康相机 2d识别库&#xff1a;lindmod&#xff0c;github可以搜到 光源&#xff1a;磐鑫光源 软件参数 系统&#xff1a;windows / Linux 开发平台&#xff1a;Qt 开发语言&#xff1a;C 开发视觉库&#xff1a;OpenCV …

[C/C++]天天酷跑游戏超详细教程-上篇

个人主页&#xff1a;北海 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C/C&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;大家一起学习交流&#xff01;&#x1f9…

maven推包The environment variable JAVA_HOME is not correctly set

解决办法&#xff1a; 打开idea查看jdk安装位置 1.在/etc下面创建&#xff08;如果存在就是更新&#xff09;launchd.conf。里面添加一行&#xff1a; setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.8.0_351.jdk/Contents/Home #JAVA_HOME后面是我的java安装路径…

OK3588应用之——人脸和人脸关键点的检测(十四)

一、主机模型转换 采用FastDeploy来部署应用深度学习模型到OK3588板卡上 进入主机Ubuntu的虚拟环境 conda activate ok3588 主机环境搭建可以参考上一篇 《OK3588板卡实现人像抠图&#xff08;十二&#xff09;》 转换成RKNN模型 cd FastDeploy wget https://bj.bcebos.co…

CDL基础原理

一、CDL简介 CDL&#xff08;全称Change Data Loader&#xff09;是一个基于Kafka Connect框架的实时数据集成服务。 CDL服务能够从各种OLTP数据库中捕获数据库的Data Change事件&#xff0c;并推送到kafka&#xff0c;再由sink connector推送到大数据生态系统中。 CDL目前支…

计算机竞赛 基于机器视觉的停车位识别检测

简介 你是不是经常在停车场周围转来转去寻找停车位。如果你的车辆能准确地告诉你最近的停车位在哪里&#xff0c;那是不是很爽&#xff1f;事实证明&#xff0c;基于深度学习和OpenCV解决这个问题相对容易&#xff0c;只需获取停车场的实时视频即可。 该项目较为新颖&#xf…

python matlab 画柱状图

函数&#xff1a; bar(x, height, width0.8, bottomNone, *, aligncenter,dataNone, **kwargs) 设置坐标的刻度(ticks)&#xff0c;轴的标签和标题 在数据分析的很多时候&#xff0c;我们各个柱下面通常不是x刻度值&#xff0c;而是有实际意义的字符串&#xff0c;那么这个时…

ClickHouse进阶(三):ClickHouse 索引

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…