lua完整学习笔记

news2024/12/23 9:27:10

lua注释

-- 单行注释
--[[ 多行注释 ]]--

lua数据结构

nil          无效值与Java的Null类似,但是在条件表示中是false

boolean      布尔值,ture或者false

number   双精度类型的浮点数

string   字符串 "  "   ,   '   '  ,   [[  ]]

table   类似于java数组,但是比数组更强大

function  由c或者lua编写的函数

thread    协同线程,是协同函数的执行体,即正在执行的协同函数

userdata  一种用户自定义数据,用于表示一种由应用程序或c/c++ 语言库所创建的类型,可以将c和c++的任意数据类型的数据存储到lua变量中调用。

lua标识符

由字母、数字、下划线组成,但不能以数字开头。

lua保留字

and     break   do   else   elseif   end   false   for   function   if   in   local   nil   not   or   repeat  return   then   true   until   while   goto

除此之外lua还定义很多内置全局变量,以下划线后跟全大写字母

lua变量

lua是弱类型语言,无需声明即可拿来用

str="你好"

变量分为全局变量和局部变量,lua中默认的就是全局变量,而局部变量local,只能在声明的语句块中使用。

local x=3

function f(){
  y=5;
  local z=8
  print("x = " ..x);
}
end

f();
-- 访问全局变量y, .. 类似于java里面的+
print("y=" ..y);
print("z=" ..z);

结果是:

x=3

y=5

z报错。

动态类型:lua是动态类型语言,变量的类型可以随时改变,无需再声明。

lua运算符

a=10       b=20

+            a+b            30              加法

-             a-b            10               减法

*             a*b            200            乘法

/             5/2             2.5              除法

%            b%a           0                 取余

^              a^2            100             求幂

~              -a             -10               负数

//             5//2           2                 整除                整除运算符(>=lua5.3)

关系运算符:

==(等于) 、  ~=(不等于)、 >  (大于)、<   (小于) 、>= (大于等于) 、<= (小于等于)

逻辑运算符:

and   逻辑与、or  逻辑或  、 not  逻辑非。

其他运算符:

lua语言中的连接运算符与计算表或字符串长度的运算符;

..   字符串连接符。                                  a..b,其中a为"Hello" ,b为"World",输出结果为"Hello World"

#   返回字符串或表的长度。                   #"Hello" 返回5

lua函数

lua中的函数的定义是以function开头,后跟函数名与参数列表,以end结尾。其可以没有返回值,也可以一次返回多个值。

固定参函数

function f(a,b)

 print(a,b)


end

print("无实参传递")
f()
print("传递一个实参")
f(10)
print("传递两个实参")
f(10,20)
print("传递三个实参")
f(10,20,30)

结果:

nil   nil

10   nil

10    20

10    20

可变参函数

-- 定义一个普通函数,包含可变参
function f(...)
 local a,b,c,d=...
 print(a,b,c,d)


end

可返回多个值

-- 定义一个普通函数,返回两个值
function f(a,b)
 local sum=a+b
 local mul=a*b
 return sum,mul;

end

-- 一次接受两个值
m,n=f(3,5)
print(m,n)

函数作为参数

lua的函数中,允许函数作为参数,作为参数的函数,可以是已经定义好的普通函数,也可以是匿名函数。

-- 定义两个普通函数
function sum(a,b)
   return a+b
end

function mul(a,b)

   return a*b

end

-- 定义一个函数,其参数是函数
function f(m,n,fun)

  local result=fun(m,n)
  print(result)
end

-- 普通调用
f(3,5,sum);
f(3,5,mul);

-- 匿名函数调用
f(3,5,function (a,b) 
       return a-b;
    end

)

lua 流程控制语句

if语句

lua提供了if...then用于表示条件判断,其中if的判断条件可以是任意表达式。lua系统将false与nil作为假,将true与非nil作为真,即使是0也是真。

if嵌套语句

lua中提供了专门的关键字elseif来做if嵌套语句。注意,不能使用else与if两个关键字的联用形式,即不能使用else if来嵌套if语句

a=5
if(a>0) then
    print("num>0")
else
    print("num<0")
end
a=5
if(a>0) then
    print("num>0")
elseif num==0 then
    print("num=0")
else
    print("num<0")
end

lua 循环语句

lua提供了四种循环控制语句:while...do循环,repeat....until循环、数值for循环,以及泛型for循环。同时,lua还提供了break与goto两种循环流程控制语句。

a=3
while a>0 do
  print(a)
  a=a-1
end
repeat
   print(a)
   a=a-1
until a<=0
for i=10,50,20  do

      print(i)
end

-- 结果:
--[[ 10
     30
     50
--]]

-- 意为i=10, i<=50,i=i+20
-- 20不写的话,默认是1
for i=1,9 do
   print(i)
   if i==5 then
      break
   end
end

lua 的table

数组

使用table可以定义一维、二维、多维数组。不过,需要注意,lua中的数组索引是从1开始的,且无需声明数组长度,可以随时增加元素。当然,同一数组元素可以是任意类型。

-- 定义一个一维数组
cities={"北京","上海","广州"}
cities[4]="深圳"
for i=1 4 do
   print("cities["..i.."]="..cities[i])

end

--开始搞二维数组
-- 声明一个空的数组
arr={}
for i=1, 3 do
-- 声明一个空的数组
   arr[i]={}
   for j=1, 2 do
     arr[i][j]=i*j
   end
end

for i=1,  3 do
  for j=1,2 do
    print(arr[i][j])
  end
end

map

使用table也可以定义出类似map的key-value数据结构。其可以定义table时直接指定key-value,也可以单独定义key-value。而访问时,一般都是通过table的key直接访问,也可以数组索引方式来访问,此时的key为索引。

-- 定义一个map
emp={name="张三",age=23,depart="销售部"}

-- 通过下标方式
emp["gender"]="男"

print(emp["name"])
print(emp["gender"])

-- 点号方式操作
print(emp.age)


-- map  key为表达式
a="xxx"
b=3
c=5

arr={
  ["emp_"..a]=true,
  [b+c]="Hello"
}

lua允许将数组与key-value混合在同一个table中进行定义。key-value不会占用数组的数字索引值。

-- 定义一个数组、map混合结构
emps={
  {name="张三",age=23},
  {name="李四",age=24},
 {name="王五",age=25},
 {name="赵六",age=26}
}
for i=1 ,4 do
  print(emps[i].name..":" ..emps[i].age)
end

官网:Lua 5.4 Reference Manual - contents

emp={"北京",name="张三",age=23,"上海",depart="销售部","广州","深圳"}
print(table.concat(emp))

结果:北京上海广州深圳

emp={"北京",name="张三",age=23,"上海",depart="销售部","广州","深圳"}
print(table.concat(emp,",",2))

结果:上海,广州,深圳

emp={"北京",name="张三",age=23,"上海",depart="销售部","广州","深圳"}
print(table.concat(emp,",",2,4))

结果:上海,广州

table.unpack()

table.pack()打包成一个table
t=table.pack("apple","banana","peach")

数组如果包含nil就会报错

lua迭代器

ipairs(table):  仅会迭代指定table中的数组元素

pairs(table):   会迭代整个table元素,无论是数组元素,还是key-value。

--遍历emp中的所有数组元素
for i,v in ipairs(emp) do
    print(i,v)
end
for k,v in pairs(emp) do
    print(k,v)
end

lua模块

--声明一个模块
rectangle ={}

--为模块添加一个变量
rectangle.pi=3.14

--为模块添加函数(求周长)
function rectangle.perimeter(a,b)
     return (a+b)*2
end
--以匿名函数方式为模块添加一个函数(求面积)
rectangle.area=function(a,b)
     return a*b;
end

return rectangle

使用模块

require "rectangle"
print(rectangle.pi)
print(rectangle.perimeter(3,5))
print(rectangle.area(3,5))

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

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

相关文章

撬动内容 10 倍增长,如何实现企业级全域内容治理

随着流量利好即将出尽&#xff0c;那些曾经仅依靠流量堆砌的营销策略&#xff0c;如今显得黯然失色。在新的市场环境下&#xff0c;更大的增长机会在哪里&#xff1f; 继续追求「运营效率」还是确立全新「战略定位」&#xff0c;企业的增长还有哪些新的可能性&#xff1f; 在刚…

日常操作之新增物料组并自动关联科目

1、创建物料组 OMSF 后台配置路径如下图&#xff1a; 直接创建一个物料组&#xff0c;给到对应描述即可。这里没有控制参数 2.、创建评估类 OMSK 我们在OBYC中配置科目时&#xff0c;是没有通过物料组的维度配置对应科目哦&#xff0c;但是评估类经常会用到GBB中的科目配置都…

Spring之AOP理解与应用

1. AOP的认识 面向切面编程&#xff1a;基于OOP基础之上新的编程思想&#xff0c;OOP面向的主要对象是类&#xff0c;而AOP面向的主要对象是切面&#xff0c;在处理日志、安全管理、事务管理等方面有非常重要的作用。AOP是Spring中重要的核心点&#xff0c;AOP提供了非常强…

【已解决】为什么Word文档里有部分内容无法编辑?

小伙伴们是否遇到过这样的情况&#xff0c;打开Word文档进行编辑&#xff0c;发现部分内容可正常编辑&#xff0c;另外一部分内容却无法编辑。这是怎么回事&#xff0c;又要如何解决呢&#xff1f; 出现以上情况&#xff0c;一般是Word文档被设置了“限制保护”&#xff0c;使…

【文末送书】Python OpenCV从入门到精通

文章目录 &#x1f354;简介opencv&#x1f339;内容简介&#x1f6f8;编辑推荐&#x1f384;导读&#x1f33a;彩蛋 &#x1f354;简介opencv OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉库&#xff0c;提供了丰富的图像处理和…

第1章 理解知识图谱:知识图谱现状、知识图谱应用场景(二)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

css实现正六边形嵌套圆心

要实现一个正六边形嵌套圆心&#xff0c;可以使用CSS的::before和::after伪元素以及border-radius属性。以下是具体的解析和代码&#xff1a; 使用::before和::after伪元素创建正六边形。设置正六边形的背景色。使用border-radius属性使正六边形的内角为60度。在正六边形内部创…

Uber Go 语言编码规范

uber-go/guide 的中文翻译 English 文档链接 Uber Go 语言编码规范 Uber 是一家美国硅谷的科技公司&#xff0c;也是 Go 语言的早期 adopter。其开源了很多 golang 项目&#xff0c;诸如被 Gopher 圈熟知的 zap、jaeger 等。2018 年年末 Uber 将内部的 Go 风格规范 开源到 G…

Spatial Data Analysis(一):线性回归

Spatial Data Analysis&#xff08;一&#xff09;&#xff1a;线性回归 来源&#xff1a;https://github.com/Ziqi-Li/GEO4162C/tree/main 在此示例中&#xff0c;我们将介绍如何在 python 中拟合线性回归模型。 我们将使用的数据集是 2020 年县级选举投票数据以及来自 ACS …

STM32单片机项目实例:基于TouchGFX的智能手表设计(1)项目介绍及GUI界面基础

STM32单片机项目实例&#xff1a;基于TouchGFX的智能手表设计&#xff08;1&#xff09;项目介绍及GUI界面基础 一、项目介绍 1.1方案提供 1.2主控选择 1.3硬件平台 1.4 开发环境 1.5 关于华清 二、GUI界面基础 2.1.1 嵌入式绘图系统 2.1.1 色彩格式 2.1.1帧缓冲区 …

ERP软件定制开发对企业的优势|app小程序搭建

ERP软件定制开发对企业的优势|app小程序搭建 随着科技的不断发展&#xff0c;企业管理也面临了更多的挑战。为了更好地适应市场需求和提高运营效率&#xff0c;越来越多的企业开始选择使用ERP软件进行管理。然而&#xff0c;市场上现成的ERP软件并不能完全满足企业的需求&#…

css 修改滚动条样式,解决Windows浏览器中滚动条不美观问题

Windows环境中的浏览器中滚动条默认是直接显示了&#xff0c;不管光标是否进入该区域&#xff0c;这样就很不美观&#xff0c;如下图&#xff1a; 之前样式为 .well {display: block;background-color: #f2f2f2;border: 1px solid #ccc;margin: 5px;width: calc(100% - 12px);h…

HarmonyOS/OpenHarmony应用开发

OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目, 目标是面向全场景、全连接、全智能时代, 搭建一个智能终端设备操作系统的框架和平台, 促进万物互联产业的繁荣发展。 了解OpenHarmony HarmonyOS是华为通过OpenHarmony项目&#xff0c;结合商业…

调试GMS应用,报错“此设备未获得play保护机制认证”问题解决

不少同学在调试GMS相关应用时&#xff0c;需登录Google账号&#xff0c;有时会弹出如下通知。 Google登录界面也会出现如下提示 这个报错的原因是设备未通过Google认证&#xff0c;google服务器未配置荣耀设备的型号白名单导致 国内网页有一些指导方法在鸿蒙\荣耀的设备上消除这…

2023年江西省“振兴杯”网络信息行业职业技能竞赛 Web4 Writeup

这次振兴杯碰到的一道题&#xff0c;某些姿势之前貌似没有碰过&#xff0c;简单记一下吧 源码 <?php class Bird{public $funcs;public $salt;public $flag;function say_flag(){$secret hash_hmac(sha256, $_GET[salt], file_get_contents(/flag));$hmac hash_hmac(sha…

BearPi Std 板从入门到放弃 - 引气入体篇(5)(printf打印到串口)

简介 基于 BearPi Std 板从入门到放弃 - 引气入体篇&#xff08;4&#xff09;(Usart 中断接收), 使用printf打印到串口 步骤 覆写fputc函数 需要添加头文件#include “stdio.h” /* USER CODE BEGIN 0 */ int fputc(int ch, FILE *f) {uint8_t temp[1] {ch};{HAL_UART_Tr…

服务器托管与服务器租用的详细比较

​  在当今数字化时代&#xff0c;服务器托管和服务器租用成为了许多企业和个人选择的两种常见方式。它们都提供了一种将服务器放置在专业机房中的解决方案&#xff0c;但在具体实施和使用过程中存在一些差异。下面将详细比较这两种方式的优势和劣势。 1. 服务器托管 服务器托…

Python机器学习、深度学习入门丨气象常用科学计算库、气象海洋常用可视化库、爬虫和气象海洋数据、气象海洋常用插值方法、EOF统计分析、WRF模式后处理等

目录 专题一 Python软件的安装及入门 专题二 气象常用科学计算库 专题三 气象海洋常用可视化库 专题四 爬虫和气象海洋数据 专题五 气象海洋常用插值方法 专题六 机器学习基础理论和实操 专题七 机器学习的应用实例 专题八 深度学习基础理论和实操 专题九 深度学习的应…

力扣543. 二叉树的直径(java DFS解法)

Problem: 543. 二叉树的直径 文章目录 题目描述思路解题方法复杂度Code 题目描述 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们…

ubuntu20.04使用LIO-SAM对热室空间进行重建

一、安装LIO-SAM 1.环境配置 默认已经安装过ros sudo apt-get install -y ros-Noetic-navigation sudo apt-get install -y ros-Noetic-robot-localization sudo apt-get install -y ros-Noetic-robot-state-publisher 安装 gtsam(如果是18.04的ubuntu直接按照官网配置&…