Lua--1.基础知识

news2024/11/27 17:00:29

Lua基础知识

  • 变量
    • 简单的4种变量类型
    • 复杂的4种变量类型
    • type函数
  • 字符串操作
    • 长度获取--#
    • 多行打印
    • 字符串拼接
    • 别的类型转字符串-- tostring()
    • 字符串提供的公共方法
  • 运算符
    • 算术运算符-- + - * / % ^
    • 条件运算符-- > < >= <= == ~=(不等于 是 ~=)
    • 逻辑运算符-- and or not
    • 位运算、三目运算符--lua不支持
  • 条件分支语句
    • if 条件 then ... end
    • 不支持switch、三目运算符
  • 循环语句
    • while -- while 条件 do ... end
    • repeat ... until 条件
    • for
  • 函数
    • 两种申明方法
    • 函数传参
    • 函数返回值
    • 函数的类型-- function
    • 不支持函数重载
    • 变长参数-- ...
    • 函数嵌套--函数里面声明函数

变量

简单的4种变量类型

  1. number
  2. string
  3. boolean
  4. nil

lua中所有的变量申明 都不需要申明变量类型 他会自动的判断类型(类似C# 里面的 var)
lua中的一个变量 可以随便赋值 ——自动识别类型
lua中使用没有声明过的变量 ,默认值是nil

复杂的4种变量类型

  1. function–函数
  2. table–表
  3. userdata–数据结构
  4. thread–协同程序

type函数

作用:得到变量类型,返回值是一个string

--lua中使用没有声明过的变量 
--不会报错 默认值 是nil
print(b)


--number 所有的数值都是number
print("**********number************")
a = 1
print(a)
print(type(a))
a = 1.2
print(a)
print(type(a))
print("**********string************")
a = "12312"
print(a)
print(type(a))
--字符串的声明 使用单引号或者双引号包裹
--lua里 没有char
a = '123'
print(a)
print(type(a))
print("**********boolean************")
a = true
print(a)
a = false
print(a)
print(type(a))

字符串操作

print("**********字符串************")
str = "双引号字符串"
str2 = '单引号字符串'

长度获取–#

--获取字符串的长度
print("**********字符串长度************")
s = "aBcdEfG字符串"
--一个汉字占3个长度
--英文字符 占1个长度
print(#s)

多行打印

  1. 转义字符
  2. [[]]
print("**********字符串多行打印************")
--lua中也是支持转义字符的
print("123\n123")
print("12\n")

s = [[我是
哈哈哈
]]
print(s)

字符串拼接

  1. string.format
print("**********字符串拼接************")
--字符串拼接 通过..
print( "123" .. "456" )
s1 = 111
s2 = 111
print(s1 .. s2)
print(s1 .. s2)

print(string.format("我是hhh,我今年%d岁了", 18))
--%d :与数字拼接
--%a:与任何字符拼接
--%s:与字符配对
--.......

别的类型转字符串-- tostring()

print("**********别的类型转字符串************")
a = true
print(tostring(a))

字符串提供的公共方法


print("**********字符串提供的公共方法************")
str = "abCdefgCd"
--小写转大写的方法,不会改变原字符串
print(string.upper(str))
--大写转小写
print(string.lower(str))
--翻转字符串
print(string.reverse(str))
--字符串索引查找
print(string.find(str, "Cde"))
--结果是3--5,lua里都是从1 开始的,有两个返回值
--截取字符串
print(string.sub(str, 3))
print(string.sub(str, 3, 4))
--字符串重复拼接
print(string.rep(str, 2))
--字符串修改,返回修改后的字符串和修改的次数
print(string.gsub(str, "Cd", "**"))

--字符转 ASCII码,指定位置1,就是‘L’转为ASCII码
a = string.byte("Lua", 1)
print(a) --76
--ASCII码 转字符
print(string.char(a))
--打印出L

运算符

算术运算符-- + - * / % ^

没有自增自减 ++ –
没有复合运算符 += -= /= *= %=
字符串 可以进行 算数运算符操作 会自动转成number

--字符串 可以进行 算数运算符操作 会自动转成number
print("加法运算" .. 1 + 2)
a = 1
b = 2

a = a + b
a = a + 1
print(a + b)
print("123.4" + 1)

print("减法运算" .. 1 - 2)
print("123.4" - 1)

print("乘法运算" .. 1 * 2)
print("123.4" * 2)

print("除法运算" .. 1 / 2)
print("123.4" / 2)

print("取余运算" .. 1 % 2)
print("123.4" % 2)

--^ lua中 该符号 是幂运算
print("幂运算" .. 2 ^ 5)
print("123.4" ^ 2)

条件运算符-- > < >= <= == ~=(不等于 是 ~=)

print("**********条件运算符************")
-- > < >= <= == ~=
print(3>1)
print(3<1)
print(3>=1)
print(3<=1)
print(3==1)
--不等于 是 ~=
print(3~=1)

逻辑运算符-- and or not

print("**********逻辑运算符************")
--&&  ||  !   “短路”
--and  or  not  lua中 也遵循逻辑运算的 “短路” 规则
print( true and false)
print( true and true)
print( false and true)

print( true or false)
print( false or false)

print( not true)

位运算、三目运算符–lua不支持

条件分支语句

if 条件 then … end

print("**********条件分支语句************")
a = 9
--if 条件 then.....end
--单分支
if a > 5 then
	print("123")
end

--双分支
-- if 条件 then.....else.....end
if a < 5 then
	print("123")
else
	print("321")
end

--多分支
-- if 条件 then.....elseif 条件 then....elseif 条件 then....else.....end
if a < 5 then
	print("123")
--lua中 elseif 一定是连这些 否则报错
elseif a == 6 then
	print("6")
elseif a == 7 then
	print("7")
elseif a == 8 then
	print("8")
elseif a == 9 then
	print("9")
else
	print("other")
end


if a >= 3 and a <= 9 then
	print("3到9之间")
end

--lua中没有switch语法  需要自己实现

不支持switch、三目运算符

循环语句

while – while 条件 do … end


print("**********while语句************")
num = 0
--while 条件 do ..... end
while num < 5 do
	print(num)
	num = num + 1
end

repeat … until 条件

print("**********do while语句************")
num = 0
--repeat ..... until 条件 (注意:条件是结束条件)
repeat
	print(num)
	num = num + 1
until num > 5 --满足条件跳出 结束条件

for

  1. for 变量名=起始值,结束值 do … end
  2. for 变量名=起始值,结束值,增值 do … end

print("**********for语句************")

for i =2,5 do --默认递增 i会默认+1
   print(i)
end



for i =1,5,2 do --如果要自定义增量 直接逗号后面写
   print(i)
end

for i =5,1,-1 do --如果要自定义增量 直接逗号后面写
   print(i)
end


函数

print("**********函数************")
--function 函数名()
--end

两种申明方法

  1. 在function后面取名字
  2. 不取名字,用一个变量存储
print("**********无参数无返回值************")
function F1()
	print("F1函数")
end
F1()
--有点类似 C#中的 委托和事件
F2 = function()
	print("F2函数")
end
F2()

函数传参

  1. 个数多了或者少了,不会报错
  2. 多了弃用
  3. 少了补空
print("**********有参数************")
function F3(a)
	print(a)
end
F3(1)
F3("123")
F3(true)
--如果你传入的参数 和函数参数个数不匹配
--不会报错 只会补空nil 或者 丢弃
F3()
F3(1,2,3)

函数返回值

  1. 可以又多个返回值
  2. 外部用多个变量来接取,接少接多不影响,少了丢弃、多了为nil
print("**********有返回值************")
function F4(a)
	return a, "123", true
end

--多返回值时 在前面申明多个变量来接取即可
--如果变量不够 不影响 值接取对应位置的返回值
--如果变量多了 不应 直接赋nil
temp, temp2, temp3, temp4 = F4("1")
print(temp)
print(temp2)
print(temp3)
print(temp4)

函数的类型-- function

print("**********函数的类型************")
--函数类型 就是 function
F5 = function( )
	print("123")
end
print(type(F5))

不支持函数重载

–函数名相同 参数类型不同 或者参数个数不同
–lua中 函数不支持重载
–默认调用最后一个声明的函数

变长参数-- …

  1. 先用表接,再使用
print("**********变长参数************")
function F7( ... )
	--变长参数使用 用一个表存起来 再用
	arg = {...}
	for i=1,#arg do
		print(arg[i])
	end
end
F7(1,"123",true,4,5,6)

函数嵌套–函数里面声明函数

闭包:改变变量的生命周期

print("**********函数嵌套************")
--函数是变量
function F8()
	return function()
		print(123);
	end
end
f9 = F8()
f9()

--闭包 就是在一个函数里返回一个函数,然后返回的函数改变传入参数的生命周期
function F9(x)
	--改变传入参数的生命周期
	return function(y)
		return x + y
	end
end

f10 = F9(10)
print(f10(5))

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

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

相关文章

初级数据结构——二叉树题库(c++)

这里写目录标题 前言[1.——965. 单值二叉树](https://leetcode.cn/problems/univalued-binary-tree/)[2.——222. 完全二叉树的节点个数](https://leetcode.cn/problems/count-complete-tree-nodes/)[3.——144. 二叉树的前序遍历](https://leetcode.cn/problems/binary-tree-…

Java基础——(一)Java概述

Java特性 简单性&#xff1a;Java与C很相似&#xff0c;但剔除了C中许多比较复杂并且很少使用的功能&#xff0c;比如头文件、指针运算、结构、联合、操作符重载、虚基类等&#xff0c;从而使Java更易于上手、学习。面向对象&#xff1a;Java是一门面向对象语言&#xff0c;具…

打造智能化在线教育平台详解:教培网校APP的架构设计与实现

本篇文章&#xff0c;小编将以教培网校APP的架构设计与实现为核心&#xff0c;深入探讨如何打造一套智能化的在线教育平台&#xff0c;为企业和教育机构提供落地参考。 一、在线教育平台的核心功能需求 构建一个高效的教培网校APP&#xff0c;首先需要明确其核心功能需求。一…

Java学习笔记--继承的介绍,基本使用,成员变量和成员方法访问特点

目录 一&#xff0c;继承 1.什么是继承 2.怎么去继承: 3.注意: 4.继承怎么学 二&#xff0c;继承基本使用 三&#xff0c;成员变量和成员方法访问特点 1.成员变量访问特点 1&#xff0c;子类和父类中的成员变量不重名: 总结: 2&#xff0c;子类和父类中的成员变量重…

IDEA2024创建一个spingboot项目

以下是创建一个基本的 Spring Boot 项目的步骤和示例&#xff1a; 初始化一个springboot工程其实有许多方法&#xff0c;笔者这里挑了一个最快捷的方式搭建一个项目。我们直接通过官方平台&#xff08;start.spring.io&#xff09;进行配置&#xff0c;然后下载压缩包就可以获取…

【Leetcode】3206.交替组1

题目描述&#xff1a; https://leetcode.cn/problems/alternating-groups-i/description/?envTypedaily-question&envId2024-11-26 题目示例&#xff1a; 解题思路 思路一&#xff1a; 1.如果color.size()小于等于2&#xff0c;则构不成环&#xff0c;直接返回结果…

利用Docker容器技术部署发布web应用程序

Docker是什么&#xff1f; docker 是一个开源的应用容器引擎&#xff0c;可以帮助开发者打包应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化&#xff0c;容器是完全使用沙箱机制&#xff0c;相互之间不会有任何…

问题:smart监控没有能流的问题? smart200与维纶屏

目前路由器网口连接一台电脑&#xff0c;一个伺服&#xff0c;一个smart200从站&#xff0c;一个smart200主站&#xff0c;还有一个mt9106iq维纶屏。 用smart主站监控&#xff0c;发现没有能流。拔掉维纶屏网线&#xff0c;就可以正常显示能流。请问各位老师傅&#xff0c;这个…

微软Ignite 2024:建立一个Agentic世界!

在今年的Microsoft Ignite 2024上&#xff0c;AI Agent无疑成为本次大会的重点&#xff0c;已经有十万家企业通过Copilot Studio创建智能体了。微软更是宣布&#xff1a;企业可以在智能体中&#xff0c;使用Azure目录中1800个LLM中的任何一个模型了&#xff01; 建立一个Agent…

【Ubuntu】E: Unable to locate package xxx

报错描述 在 Ubuntu 上 执行 apt install xxx 出现下面的报错&#xff1a; 即无法定位到该 Package&#xff0c;一般形式如下&#xff1a; # apt install xxx Reading package lists... Done Building dependency tree... Done Reading state information... Done E: Unable …

go语言逆向-基础basic

文章目录 go 编译命令 ldflags -w -s的作用和问题使用 file 命令查看文件类型 go 语言逆向参考go ID版本GOROOT和GOPATHGOROOTGOPATHGOROOT和GOPATH的关系示例 go build和 go modpclntab &#xff08;Program Counter Line Table 程序计数器行数映射表&#xff09;Moduledata程…

RL78/G15 Fast Prototyping Board Arduino IDE 平台开发过程

这是一篇基于RL78/G15 Fast Prototyping Board的Arduino IDE开发记录 RL78/G15 Fast Prototyping Board硬件简介&#xff08;背景&#xff09;基础测试&#xff08;方法说明/操作说明&#xff09;开发环境搭建&#xff08;方法说明/操作说明代码结果&#xff09;Arduino IDE RL…

Servlet细节

目录 1 Servlet 是否符合线程安全&#xff1f; 2 Servlet对象的创建时间&#xff1f; 3 Servlet 绑定url 的写法 3.1 一个Servlet 可以绑定多个url 3.2 在web.xml 配置文件中 url-pattern写法 1 Servlet 是否符合线程安全&#xff1f; 答案&#xff1a;不安全 判断一个线程…

使用UE5.5的Animator Kit变形器

UE5.5版本更新了AnimatorKit内置插件&#xff0c;其中包含了一些内置变形器&#xff0c;可以辅助我们的动画制作。 操作步骤 首先打开UE5.5&#xff0c;新建第三人称模板场景以便测试&#xff0c;并开启AnimatorKit组件。 新建Sequence&#xff0c;放入测试角色 点击角色右…

【前端】ES6基础

1.开发工具 vscode地址 :https://code.visualstudio.com/download, 下载对应系统的版本windows一般都是64位的 安装可以自选目录&#xff0c;也可以使用默认目录 插件&#xff1a; 输入 Chinese&#xff0c;中文插件 安装&#xff1a; open in browser&#xff0c;直接右键文件…

蓝桥杯模拟题不知名题目

题目:p是一个质数&#xff0c;但p是n的约数。将p称为是n的质因数。求2024最大质因数。 #include<iostream> #include<algorithm> using namespace std; bool fun(int x) {for(int i 2 ; i * i < x ; i){if(x % i 0)return false;}return true; } int main() …

Android 13 编译Android Studio版本的Launcher3

Android 13 Aosp源码 源码版本 Android Studio版本 Launcher3QuickStepLib (主要代码) Launcher3ResLib(主要资源) Launcher3IconLoaderLib(图片加载&#xff0c;冲突资源单独新建) 需要值得注意的是&#xff1a; SystemUISharedLib.jar 有kotlin和java下的&#xff0c;在 Lau…

VMware ubuntu创建共享文件夹与Windows互传文件

1.如图1所示&#xff0c;点击虚拟机&#xff0c;点击设置&#xff1b; 图1 2.如图2所示&#xff0c;点击选项&#xff0c;点击共享文件夹&#xff0c;如图3所示&#xff0c;点击总是启用&#xff0c;点击添加&#xff1b; 图2 图3 3.如图4所示&#xff0c;出现命名共享文件夹…

零地址挂页

零地址 如果我们有比较好的C编程基础&#xff0c;我们就会知道&#xff0c;我们在代码中定义了一个零地址或者空指针&#xff0c;那么它实际上会指向虚拟内存的零地址&#xff0c;多数操作系统&#xff0c;包括Win&#xff0c;在进程创建的时候&#xff0c;都会空出前64k的空间…

oneplus6线刷、trwp、magisk(apatch)、LSPosed、Shamiko、Hide My Applist

oneplus6线刷android10.0.1 oneplus6线刷包(官方android10.0.1)下载、线刷教程&#xff1a; OnePlus6-brick-enchilada_22_K_52_210716_repack-HOS-10_0_11-zip 启用开发者模式 设置 / 连续点击6次版本号 : 启用开发者模式设置/开发者模式/{打开 usb调试, 打开 网络adb调试,…