当前位置: 首页 > news >正文

Lua学习(一)

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)doprint("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 doprint(i)
end

5.3泛型for循环

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

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

5.4 repeat until 循环

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

b =0
repeatprint(b)b = b+1
until(b >10 )

5.5 break 语句

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

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

6. 流程控制

6.1 if语句

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

--[ 0 为 true ]
if(0)
thenprint("0 为 true")
end

6.2 if else 语句

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

if(布尔表达式)
then--[ 布尔表达式为 true 时执行该语句块 --]
else--[ 布尔表达式为 false 时执行该语句块 --]
enda =10
if(a >6)thenprint("我比6大")
elseprint("我比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.lryc.cn/news/151557.html

相关文章:

  • Python:列表推导式
  • 应急三维电子沙盘数字孪生系统
  • LeetCode每日一题:1654. 到家的最少跳跃次数(2023.8.30 C++)
  • 数据结构例题代码及其讲解-栈与队列
  • 【Spark】Pyspark RDD
  • 数学建模:Logistic回归预测
  • 一个面向MCU的小型前后台系统
  • 软件外包开发人员分类
  • HTML 元素被定义为块级元素或内联元素
  • 单调递增的数字【贪心算法】
  • gnuradio-hackrf_info.exe -FM频率使用
  • JVM学习(三)--生产环境的线程问题诊断
  • PHP数组处理$arr1转换为$arr2
  • ATF(TF-A)安全通告 TFV-10 (CVE-2022-47630)
  • 详解 SpringMVC 中获取请求参数
  • Message: ‘chromedriver‘ executable may have wrong permissions.
  • 每日一题 1372二叉树中的最长交错路径
  • 【力扣每日一题】2023.9.2 最多可以摧毁的敌人城堡数量
  • kotlin实现java的单例模式
  • 使用 KeyValueDiffers 检测Angular 对象的变化
  • Macos 10.13.2安装eclipse
  • Android逆向学习(一)vscode进行android逆向修改并重新打包
  • 【深入浅出设计模式--状态模式】
  • Debezium系列之:Debezium Server在生产环境大规模应用详细的技术方案
  • Echart笔记
  • docker 笔记1
  • HTTP Get 和 Post 的区别
  • C++超级迷宫游戏
  • CUDA小白 - NPP(3) 图像处理 Color and Sampling Conversion
  • Android硬件通信之 串口通信