lua语法

news2024/11/25 0:56:24

lua语法

1.lua数据类型

lua 脚本输出乱码,将lua脚本改为UTF-8编码,并且需要DOS下修改代码页:CHCP 65001 即可。

image-20231218210209855

基本语法

注释

print("script lua win")

-- 单行注释

--[[

多行注释

]]--

标识符

类似于:java当中 变量、属性名、方法名。

以字母(a-z,A-Z)、下划线 开头,后面加上0个或多个 字母、下划线、数字。

不要用下划线+大写字母。

保留字。

总结一点:按照正常思维命名即可。

全局变量

print(a) -- nil
a=1
print(a)
a=nil --销毁a
print(a)
  • nil

没有任何有效值,就是一个 nil。 可以用于删除

print("---delete---")
-- 定义一个table
myTab = {key1="value1",key2="value2"}
for k,v in pairs(myTab) do
	print(k.."_"..v)
end

print("---after delete---")
myTab.key1=nil
for k,v in pairs(myTab) do
	print(k.."_"..v)
end

print("---判断是否为nil")
print(x) -- nil
print((type(x)==nil)) -- false
print(type(x)=='nil') -- true

image-20231215163327032

  • boolean

lua会将false(false\nil) 看做是false, 其他的都看做是 true(其他都为true,包括0)

print("---boolean---")

print(type(true))  -- boolean
print(type(false)) -- boolean
print(type(nil))  -- nil

if false or nil then
	print("nil被当为true")
else
	print("nil为false") -- false
end

print("---测试0---")
if 0 then 
	print("0 是true") -- true
else 
	print("0 是false")
end
  • number

双精度(8个字节)。

print("---------测试number-------------")
a = 10
print(type(a))
  • String

字符串用单引号或双引号来表示。

print("双引号字符串")

print("单引号字符串")

用 [[可以换行的字符串 ]]

i = [[

我是中国人,

我爱我的祖国!

]]

print(i)

字符串和数字进行数学运算,优先将 字符串 转 成 数字。

print("1" + 2) -- 3

print("1" + "2") -- 3

print("1+2") -- 1+2

-- 非数字的字符串和数字进行计算,则会报错-- lua: string.lua:1: attempt to perform arithmetic on a string value
print("error"+1)

字符串连接

-- error1
print("error"..1)

计算字符串长度(#字符串)

testLenth = "abcde"

print("testLenth的长度为:"..#testLenth)
  • table

类比成java当中:数组,map,链表,队列等。

table的key的索引,从1开始。

print("---------测试 table-------------")
tab1 = {}

tab2 = {"a","b","c"}

tab3 = {key1="value1", key2 = "value2"}
print("tab3-:")
for k,v in pairs(tab3) do
 print(k.."="..v)
end 
print("tab3:")

tab1["a_key"]="a_value"
for k,v in pairs(tab1) do
 print(k.."="..v)
end 

for k,v in pairs(tab2) do
 print(k.."="..v)
end 
-- table的key的索引,从1开始。
-- 1=a
-- 2=b
-- 3=c


-- 删除table中的元素
print("tab3-:")
tab3["key2"] = nil
for k,v in pairs(tab3) do
 print(k.."="..v)
end 
print("tab3:")
  • function

阶乘:

function factorial(n)
 if n == 0 then
 return 1
 else
 return n * factorial(n - 1)
 end
end
testFac = factorial
print("6的阶乘结果:"..testFac(6))

匿名函数

print("------------匿名function-------------")
-- 定义函数
function testPrint(tab, func)
 for k,v in pairs(tab) do
 print(func(k,v))
 end
end

-- 定义数组调用函数
tab1 = {"a","b","c"}
testPrint(tab1,
 function(k,v)
 return k.."="..v
 end
)

2.变量赋值

a = 变量值。

print("---变量赋值---")
a,b=1,2
a = 1+2
print(a,b) -- 3  2

常用:x , y = y, x

a,b,c=1,2
print(a,b,c) -- 1       2       nil

变量个数 > 值的个数:按照变量的个数 补足 nil。

a,b,c = 1,2,3,4
print(a,b,c) -- 1       2       3

变量个数<值的个数:多余的值会被忽略。

a,b = 1,2
function var() 
 a = nil
 b = 3
 local c = 4
 print(c) -- 4
 return a,b
end

a,b = var()
print(a,b,c) -- nil     3       nil

多变量赋值:还可以用于函数的返回, 参数值互换。

a,b = func();

需要赋值给变量,如果能用局部变量,尽量用局部变量。

3.索引

对table中元素的访问。

tab[“key”]

tab.key

print("-----------索引--------------")
tab = {key1 = "中国",key2 = "美国"}
print(tab["key1"]) -- 中国
print(tab.key2) --美国

4.循环

用途:做一些有规律的重复操作。
循环体:一组被重复执行的语句。循环条件:判断能否继续循环。

while循环

while(循环条件)
do
业务代码;
对循环条件的控制;
end
a = 1
while(a<5)
do
 print(a)
 a = a+1
end

for循环

数值for循环:
for var=exp1,exp2,exp3 do
循环体
end

var的值,从exp1一直到exp2,步长是exp3(是可选的,默认是1)

print("----for----")
for i=1,10,2 do
 print(i) -- 1 3 5 7 9
end

exp1,exp2,exp3 只在循环开始前计算一次。

print("----for----")
for i=1,test(2) do
 print(i) -- 1 2 3 4
end

泛型for循环:

是通过迭代器进行的。

a = {"one","two","three"}
for k,v in pairs(a) do
 print(v)
end

repeat until

repeat
循环体
until(条件)
先执行循环体,直到满足条件。如果条件为false,继续执行循环体,如果条件为true,则跳出循
环。
a = 1
repeat 
 a = a+1
 print(a)
until(a>5)
print(a)--6

5.流程控制

if()

print("-----------if-------------")
a = 1
if(a == 1) then
 print(a.."是1")
end

0 是 true。

6.函数

print()

功能:1。完成指定的任务。2。计算并返回值(可以返回多个值)。

函数的范围(local ,缺省) function 函数名称(参数列表)

函数体;

return 结果

end

定义一个函数:实现求两个数的最大值。

print("---------------函数定义:求最大值---------------")
function testMax(num1,num2)
 if (num1 > num2) then
 result = num1;
 else
 result = num2;
 end
 return result;
end
print("15,20中的最大值是:"..testMax(15,20)) -- 20

函数可以作为参数进行传递。

例子:自定义打印函数。

print("---------------函数定义:自定义打印函数---------------")
myPrint = function(p)
 print("重新的打印函数:",p)
end;
myPrint("test");
function add(num1,num2,myPrintParam)
 result = num1 + num2;
 myPrintParam(result);
end
add(2,3,myPrint)

image-20231218215001500

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

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

相关文章

ASP.NET MVC+EntityFramework图片头像上传

1&#xff0c;先展示一下整体的效果 2&#xff0c;接下来展示用户添加以及上传头像代码、添加用户界面 前端代码如下&#xff1a; <div class"form-group">Html.LabelFor(model > model.img, "头像&#xff1a;", htmlAttributes: new { class &…

网络协议小记

一、TCP/IP协议 作为一个小萌新&#xff0c;当然我无法将tcp/ip协议的大部分江山和盘托出&#xff0c;但是其中很多面试可能问到的知识&#xff0c;我觉得有必要总结一下&#xff01; 首先&#xff0c;在学习tcp/ip协议之前&#xff0c;我们必须搞明白什么是tcp/ip协议。 1、…

IND-CCA DEM:AE AEAD

参考文献&#xff1a; [BN00] Bellare M, Namprempre C. Authenticated encryption: Relations among notions and analysis of the generic composition paradigm[C]//International Conference on the Theory and Application of Cryptology and Information Security. Berl…

网络安全之Linux环境配置及Linux基础知识讲解<三>

目录 一.下载安装Vmware二.下载安装Kali三.Linux目录结构四.Linux文件属性五.文件目录管理六.vim编辑器 一.下载安装Vmware Vmware官网&#xff1a;https://www.vmware.com 二.下载安装Kali Kali包含数百种工具&#xff0c;可用于各种信息安全任务&#xff0c;例如渗透测试、…

静态路由及动态路由

文章目录 静态路由及动态路由一、静态路由基础1. 静态路由配置2. 负载分担3. 路由备份4. 缺省路由5. 静态路由实操 二、RIP 动态路由协议1. RIP 协议概述2. RIP 协议版本对比2.1 有类路由及无类路由 3. RIP 路由协议原理4. RIP 计时器5. 度量值6. 收敛7. 示例 静态路由及动态路…

ADB:获取坐标

命令&#xff1a; adb shell getevent | grep -e "0035" -e "0036" adb shell getevent -l | grep -e "0035" -e "0036" 这一条正确&#xff0c;但是&#xff0c;grep给过滤了&#xff0c;导致没有输出 getevent -c 10 //输出10条信息…

【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用

【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用 1&#xff09;框架介绍与引入1.1.&#x1f680; 什么是 StreamPark1.2.&#x1f389; Features1.3.&#x1f3f3;‍&#x1f308; 组成部分1.4.引入 StreamPark 2&#xff09;安装部署2.1.环境要求2.2.Hado…

electron与cesium组件入门应用功能

electron与cesium组件入门应用功能 运行应用效果图&#xff1a; electron应用目录&#xff0c;需要包括三个文件: index.html main.js package.json (一)、创建一个新项目 目录名称&#xff1a;project_helloWolrd (二)、生成package.json文件 npm init --yes(三&#x…

Glycosaminoglycans Assay Kit(糖胺聚糖检测试剂盒)--Chondrex

糖胺聚糖&#xff08;glycosaminoglycans&#xff0c;GAGs&#xff09;是一种携带负电荷的多糖链&#xff0c;位于大多数结缔组织和许多不同类型细胞的细胞外基质&#xff08;extracellular matrices, ECM&#xff09;中以及细胞表面上。由重复双糖单位复合构成的糖胺聚糖可分为…

crash实战:手把手教你使用crash分析内核dump

Kdump是Linux的一种内核崩溃捕获机制&#xff0c;Linux内核遇到致命错误崩溃时会触发Kdump机制将崩溃时的现场保存下来&#xff0c;以便后续分析和故障排查。目前市面上有很多分析Kdump的工具&#xff0c;例如trace32, crash tool&#xff0c;本文介绍crash tool在手机领域的应…

mac电脑html文件 局域网访问

windows html文件 局域网访问 参考 https://blog.csdn.net/qq_38935512/article/details/103271291mac电脑html文件 局域网访问 开发工具vscode 安装vscode插件 Live Server 完成后打开项目的html 右键使用Live Server打开页面 效果如下&#xff0c;使用本地ip替换http://12…

Kafka发送流程

首先我们要将外部数据导入到集群&#xff0c;首先在main线程中创建producer 对象&#xff0c;调用send方法发送数据&#xff0c;拦截器为可选项&#xff0c;通过序列化器对数据序列化&#xff0c;因为需要跨节点通讯&#xff0c;分区器会对每个数据进行分区&#xff0c;发送到指…

深入浅出RPC:选取适合自己的RPC

文章目录 1、RPC概念&&背景1.1、RPC背景 1.2、RPC是什么&#xff0c;什么时候需要用到&#xff1f;2、进程间的通信 - IPC与RPC2.1、什么是IPC2.2、IPC与RPC联系 3、RPC的实现3.1、RPC实现的基本思路3.2、RPC实现的扩展方向 4、RPC的选择 1、RPC概念&&背景 1.…

基于ssm大学学术交流论坛论文

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于大学学术交流论坛当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了大学学术交流论坛的发展&#xff0c;它彻底改…

爬虫国密加密案例:某医保服务

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、找出需要加密的参数 js运行 atob(‘aHR0cHM6Ly9mdXd1Lm5oc2EuZ292LmNuL25hdGlvbmFsSGFsbFN0LyMvc2VhcmNoL21lZGljYWw/Y29…

无框架Java转go语言写http与tcp请求

项目地址 https://github.com/cmdch2017/http_tcpServer 项目结构 如何快速上手 http篇 1、controller包就相当于RestController&#xff0c;这里返回了一个Person对象&#xff0c;当你需要新建一个接口时&#xff0c;再新写一个func仿照下面的方法就行了 package control…

送奶APP开发:终极指南

您是否有兴趣使用新鲜牛奶和乳制品&#xff0c;但不想每天早上去乳制品店或最近的商店&#xff1f;借助技术&#xff0c;订购日常用品&#xff08;例如杂货和牛奶&#xff09;变得更加简单。 DailyMoo 是最受欢迎的送奶应用&#xff0c;收入达数百万人民币。因此&#xff0c;投…

vue门户设计器实现技术方案

一、什么是门户设计器 门户设计器是一种用于创建和设计门户网站或者应用系统首页的工具。它通常是一个软件应用程序&#xff0c;可以帮助用户快速、轻松地设计和构建自己的门户网站或者应用系统的首页。门户设计器通常提供在线拖拉拽设计器&#xff0c;以及各种模板、主题和组…

多项目同时跑多个node版本-比nvm好用的volta

开发环境中多个项目需要node版本不同&#xff0c;且同时不止是一个项目在开发中&#xff0c;用了nvm进行node版本管理和切换&#xff0c;但是太麻烦了。新的解决方案volta可以比较好的处理这种情况 Volta 官网先挂出来&#xff1a;https://volta.sh/ 1、volta是什么&#xff…

Paging-5G 寻呼

处于RRC_IDLE态的UE与网络之间是不存在RRC连接的&#xff0c;处于RRC_INACTIVE态的UE虽然与网络建立了RRC连接&#xff0c;但该连接是挂起的。当网络有下行数据需要发往处于RRC_IDLE或RRC_INACTIVE态的UE时&#xff0c;网络需要先通过Paging流程来寻呼UE&#xff0c;以通知该UE…