Lua环境搭建+Lua基本语法

前期准备:

搜索并下载安装LuaForWindows,例:

安装完成后开启cmd窗口,输入lua

出现版本号证明成功下载安装 

使用Sublime Text编辑器编写Lua

使用浏览器或CSDN搜索Sublime Text下载并安装,安装成功后打开编辑器,编辑界面如下图:

打开专门存放Lua项目文件的文件夹:

在文件夹中新建本次要编写代码的文件:

编写示例代码并保存文件:

在Sublime Text编辑器中运行Lua代码快捷键:Ctrl+B(弹出框选择lua) 

在cmd中运行方式如下:

Lua回顾网站

        https://www.runoob.com/lua/lua-tutorial.html

语言执行方式

        编译型语言:代码在运行前需要使用编译器,先将程序源代码编译为可执行文件,再执行

                C/C++

                Java,C#

                Go,Objective-C

        解释型语言(脚本语言):需要提前安装编程语言解析器,运行时使用解析器运行程序源代码

                JavaScript(TypeScript)

                Python,PHP,Perl,Ruby

                SQL

                Lua

                特点:运行才能调试,运行速度稍慢,开发速度快。

        解析器安装

                解压缩解析器(即前文提到的LuaForWindows

Lua是什么

        Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

Lua特点

        轻量级:它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。

        可扩展:Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供一部分功能,Lua可以使用它们,就像是本来就内置的功能一样。

使用领域:

        游戏行业(魔兽世界的插件,愤怒的小鸟)

        Web领域(Nginx功能开发)

        嵌入式领域

使用方式

        需要高性能的程序部分,使用(C/C++)实现。需要快速实现功能部分,使用Lua实现

国内游戏行业流行的Lua使用方式

        Cocos2D-X(Cocos):核心引擎使用C++实现,提供LuaBinding(API的Lua调用),

        游戏逻辑开发部分可使用Lua开发(刀塔传奇)

        Unity3D:使用如xLua插件(API的Lua调用),实现游戏核心代码使用C#实现(打包时il2cpp,编译为C++),游戏逻辑使用Lua开发(王者荣耀)

Lua语言基础

        环境安装

                Mac:使用Homebrew安装

                Windows:https://www.lua.org/download.html(或见前文)

编程方法

        交互式编程

        脚本式编程(将脚本的路径,传递给编译器)

Lua基本语法

        注释

                单行,多行

        变量

                命名,内部全局变量,局部,全局

        数据类型

                type()函数判断类型

                nil  boolean  number  string  function  table

   部分示例代码:

--//C#的单行注释
--Lua的单行注释
--[[/*  */C#的多行注释
]]
--[[ Lua的多行注释]]

 Lua变量与数据类型,字符串操作

--C#定义变量
--类型 变量名=变量值;
--例:string name="myName";--Lua会自动推导变量类型
--Lua可以不用写分号,也可以编写分号
--变量声明
name="myName"--调用变量
--C# Debug.Log(); Console.WriteLine();
print(name)--内置变量
--特点:下划线+大写字母
--查看Lua的版本
print(_VERSION)--可以调用一个不存在的变量
--值是nil(相当于C#中的null)
print(id)--销毁一个已经定义的变量
name=nil
print(name)--全局变量和局部变量
--data ="myData"   定义了一个全局变量
--一般开发中,轻易不会使用全局变量,因为全局变量可以被随意更改,不安全,不稳定
local data="myData"  --定义了一个局部变量(data的作用域是当前文件)---------------------------------------------------------------------------数据类型--获得的变量的类型,使用type()
local name="Unity"
--type()是函数结构,是一个代码片段,可以重复调用执行,有参数有返回值
print(type(name))--获得type()返回值的类型
-- type()返回值的类型是string
print(type(type(name)))--对一个没有定义的变量获取类型
print(type(bb))--判断一个未定义的变量
print(type(bb)=="nil")--数字类型的数值
--C#中多种数字类型,被归纳到number数据类型中,例:
print(type(123))
print(type(1.25))--布尔类型的数值
--布尔有true和false
print(type(true))
--单引号字符串
print(type('LikeChar'))---------------------------------------------------------------------------单行定义字符串
local str1 = "abc"
local str2 = 'def'--多行定义字符串
--完全的还原字符串内部的定义结构,如换行符都是存储的
local str3 = [[
one
two
]]--C#字符串拼接
-- str1 + str2
print(str1..str2)
--Lua对两个字符串相加时,会将他们转换成数字类型,转换失败会报错,
--如果转换成功,则进行加运算后,得到数字结果
print("1"+"2")--获取字符串的长度
print(#str1)-------------------------------------------------------------------------
--字符串相关函数
--string.函数名
--字符串大写化
print(string.upper(str1))
--字符串小写化
print(string.lower(str1))--Lua支持多返回值
--字符串的下标是从1开始的!!!--字符串查找
--参数1:被查找的字符串,参数2:查找的内容
--返回值:起始找到的位置下标和结束找到的位置下标
print(string.find("abcdefg","cde"))--字符串的反转
print(string.reverse("abcdefg"))--截取字符串
--方式1(提供起始位置下标,截取到结尾)
print(string.sub("abcdefg",3))
--方式2(提供起始位置下标,提供结束位置)  C#的第二个参数是截取长度
print(string.sub(3,5))--截取到倒数第二个字符
local data="abcdefghijk"
print(string.sub(data,3,#data-1))--字符串格式化
--参数1:需要被格式化的字符串,其中包含占位符,%d表示数字
--参数2:填入格式化字符串中的内容
print(string.format("I'm the %d player,she is the %d player",3,5))--字符串重复
--被重复的字符串
--重复的次数
print(string.rep("abc",2))--ASCII转字符
print(string.char(65))
--字符转ASCII
print(string.byte("A"))--字符串替换
--参数1:原始串,参数2:需要替换的内容,参数3:替换后的内容
--返回值:替换结果,替换的次数
print(string.gsub("abcd","bc","**"))

Lua数组

--数组初始化
--C# string[] data=new string[20];
local data = {}
--起始索引从1开始
--类型可以混合
--索引值可以为负数
--即使索引从1开始,也可以赋值0索引
--索引可以断开
--初始化时,对于没有索引的值,索引是从1向上累加的
--初始化提供索引的赋值方法,[索引值]=数值
data={"abc",123,[-1]=100,[0]=99,[4]=233}
print(data[-1])
--获取数组的长度
--这种方式,获得的是从1索引开始,索引连续的数据个数
--中间断开,计数结束
print(#data)--修改某一个值
data[1]="def"
print(data[1])--数组在Lua中是用Table实现的
local data2={{"aa","bb"},{11,22}}
print(data2[2][1])

Lua运算符+判断,循环语句

--2的3次方
print(2^3)--C#不等于"!="
print(2~=3)--Lua没有++ --
local i=0
i = i + 1--Lua没有+=,-=,*=--[[C#if(条件){条件达成的语句块}
]]
local con1 = true
if(con1)
then print("条件1达成")
end--[[C#if(条件){条件达成的语句块}else{否则达成的语句块}
]]
if(false)
thenprint("条件1达成")
elseprint("else达成")
end--[[C#if(条件){条件达成的语句块}else if{else if条件}else{否则达成的语句块}
]]
if(false)
thenprint("条件1达成")
elseif(true)
thenprint("elseif达成")
elseprint("else达成")
end--[[C#if(条件){if(条件){//进入第二层条件}}
]]
if(true)
thenif(true)thenprint("进入第二层if")end
end--Lua没有switch,所以可以使用if-elseif-else的结构代替--[[C#while(条件){循环制}
]]
local num=1
while(num<3)  --当条件满足时,进入循环
do--local修饰的num,虽然是局部变量,但是作用域为当前文件,所以在循环体内,可以取得值print(num)num=num+1
end--[[C# do whiledo{循环体}while(条件)至少执行一次do结构体内的代码,while条件满足时,再do执行代码
]]
local num=1
repeatprint(num)num=num+1
until(num>5) --直到条件满足时,跳出循环-------------------------------------------------------------------------------------[[do{if(){break;}if(){break;}if(){break;}}while(false)
]]repeatif(true)thenprint("此处跳出")breakendif(true)thenprint("此2处跳出")end
until(true)
print("继续执行")  local data={"aa","bb","cc","dd","ee"}
--参数1:变量i的初始值,遍历Lua表,使用1
--参数2:增长到多少
--参数3:增长步长,默认值是1
for i=1,#data
doprint(data[i])
end--倒序遍历
for i=#data,1,-1
do	print(data[i])
end--迭代器(遍历table)
--one是不加中括号的字符串索引
--"aa" "bb"自动加1,2索引
--[4]指定数字索引
--[-1]指定负数索引
--["two"]是加中括号的字符串索引写法
local data={one="cc","aa","bb",[4]=3,[-1]=4,["two"]="dd"}--连续索引数值迭代器
--迭代器就是指向table的指针,连续数字索引迭代器,
--只会获取从1开始的数字索引,且必须索引是连续的才能持续获得值
--此处的for结构,可以理解为C#的foreach结构
for k,v in ipairs(data)
doprint("k:"..k..",v:"..v)
endprint("-----------------------------")
--所有数值迭代器
--相对于ipairs,所有数值迭代器去掉了i,i可以理解为int,
--去掉int的迭代器,也就去掉了连续数值索引的限定
--获取table长度的最稳定方法,就是使用所有数值迭代器获取
for k,v in pairs(data)
doprint("k:"..k..",v:"..v)
end

该系列专栏为网课课程笔记,仅用于学习参考。

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

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

相关文章

FFmpeg录制屏幕和音频

一、FFmpeg命令行实现录制屏幕和音频 1、Windows 示例 #include <cstdlib> #include <string> #include <iostream>int main() {// FFmpeg 命令行&#xff08;录制屏幕 麦克风音频&#xff09;std::string command "ffmpeg -f gdigrab -framerate 3…

【数据集】多视图文本数据集

多视图文本数据集指的是包含多个不同类型或来源的信息的文本数据集。不同视图可以来源于不同的数据模式&#xff08;如原始文本、元数据、网络结构等&#xff09;&#xff0c;或者不同的文本表示方法&#xff08;如 TF-IDF、词嵌入、主题分布等&#xff09;。这些数据集常用于多…

C++ 继承方式使用场景(极简版)

1. 公有继承&#xff08;public&#xff09; 什么时候用&#xff1f; “是一个”&#xff08;is-a&#xff09;关系&#xff1a;派生类 是 基类的一种。 例&#xff1a;class Dog : public Animal&#xff08;狗是动物&#xff09; 最常见&#xff0c;90%的继承都用它。 2. 保…

Ubuntu 系统 Docker 中搭建 CUDA cuDNN 开发环境

CUDA 是 NVIDIA 推出的并行计算平台和编程模型&#xff0c;利用 GPU 多核心架构加速计算任务&#xff0c;广泛应用于深度学习、科学计算等领域。cuDNN 是基于 CUDA 的深度神经网络加速库&#xff0c;为深度学习框架提供高效卷积、池化等操作的优化实现&#xff0c;提升模型训练…

高密度任务下的挑战与破局:数字样机助力火箭发射提效提质

2025年4月1日12时&#xff0c;在酒泉卫星发射中心&#xff0c;长征二号丁运载火箭顺利升空&#xff0c;成功将一颗卫星互联网技术试验卫星送入预定轨道&#xff0c;发射任务圆满完成。这是长征二号丁火箭的第97次发射&#xff0c;也是长征系列火箭的第567次发射。 执行本次任务…

关于SQL子查询的使用策略

在 SQL 优化中&#xff0c;一般遵循**“非必要不使用子查询”**的原则&#xff0c;因为子查询可能会带来额外的计算开销&#xff0c;影响查询效率。但是&#xff0c;并不是所有子查询都需要避免&#xff0c;有时子查询是最优解&#xff0c;具体要根据实际场景选择合适的优化方式…

JavaEE初阶复习(JVM篇)

JVM Java虚拟机 jdk java开发工具包 jre java运行时环境 jvm java虚拟机(解释执行 java 字节码) java作为一个半解释,半编译的语言,可以做到跨平台. java 通过javac把.java文件>.class文件(字节码文件) 字节码文件, 包含的就是java字节码, jvm把字节码进行翻译转化为…

2.pycharm保姆级安装教程

一、pycharm安装 1.官网上下载好好软&#xff0c;双击打开 2.下一步 3.修改路径地址 (默认也可以) 4.打勾 5.安装 不用重启电脑 二、添加解释器 1.双击软件&#xff0c;打开 2.projects – new project 3.指定项目名字&#xff0c;项目保存地址&#xff0c;解释器 4.右击 – …

zk基础—4.zk实现分布式功能二

大纲 1.zk实现数据发布订阅 2.zk实现负载均衡 3.zk实现分布式命名服务 4.zk实现分布式协调(Master-Worker协同) 5.zk实现分布式通信 6.zk实现Master选举 7.zk实现分布式锁 8.zk实现分布式队列和分布式屏障 4.zk实现分布式协调(Master-Worker协同) (1)Master-Worker架构…

Java 实现 字母异位词分组

在这篇博客中&#xff0c;我们将详细解析如何使用 Java 代码来解决 字母异位词分组这个经典的算法问题。我们会逐步分析代码逻辑&#xff0c;并探讨其时间复杂度及优化思路。 题目描述 给定一个字符串数组 strs&#xff0c;请将字母异位词组合在一起。字母异位词是指由相同字…

【Ragflow】10. 助理配置参数详细解析/模型响应加速方法

概述 Ragflow的助理配置中&#xff0c;有很多参数&#xff0c;尽管官方文档给出了一定程度的解释&#xff0c;但不够详细。 本文将对各项参数进行更详细的解释说明&#xff0c;并进一步挖掘某些参数中隐含的潜在陷阱。 助理设置 空回复 含义&#xff1a;输入的问题若未能在…

Mac Apple silicon如何指定运行amd64架构的ubuntu Docker?

如何指定运行amd64架构的ubuntu Docker 下面这个docker命令如何指定运行amd64架构的ubuntu Docker&#xff1f; docker run -it -v $(pwd):/workspace ubuntu:20.04 bash这个命令已经非常接近正确运行一个基于 amd64 架构的 Ubuntu 容器了&#xff0c;但如果你想明确指定运行…

ColPali:基于视觉语言模型的高效文档检索

摘要 文档是视觉丰富的结构&#xff0c;不仅通过文本传递信息&#xff0c;还包括图表、页面布局、表格&#xff0c;甚至字体。然而&#xff0c;由于现代检索系统主要依赖从文档页面中提取的文本信息来索引文档&#xff08;通常是冗长且脆弱的流程&#xff09;&#xff0c;它们…

使用C++实现HTTP服务

天天开心&#xff01;&#xff01;&#xff01; 阅读本篇文章之前&#xff0c;请先阅读HTTP基础知识 传送门----> HTTP基础知识 文章目录 一、CWeb服务器&#xff08;核心代码WebServer.cpp&#xff09;二、静态文件结构三、编译和运行四、访问测试 一、CWeb服务器&#xff…

Reactive编程入门:Project Reactor 深度指南

文章目录 4.2.1 创建 Flux 和 MonoFlux 基础创建方式高级创建模式Mono 创建方式 4.2.2 订阅与数据处理基础订阅模式数据处理操作符 4.2.3 核心操作符深度解析flatMap 操作符zip 操作符buffer 操作符 高级组合模式复杂流处理示例背压处理策略 测试响应式流性能优化技巧 React 编…

【万字总结】前端全方位性能优化指南(完结篇)——自适应优化系统、遗传算法调参、Service Worker智能降级方案

前言 自适应进化宣言 当监控网络精准定位病灶&#xff0c;真正的挑战浮出水面&#xff1a;系统能否像生物般自主进化&#xff1f; 五维感知——通过设备传感器实时捕获环境指纹&#xff08;如地铁隧道弱光环境自动切换省电渲染&#xff09; 基因调参——150个性能参数在遗传算…

PQ以及有关索引的笔记Faiss: The Missing Manual

参考Faiss 索引结构总结&#xff1a; 为了加深记忆&#xff0c;介绍一下Inverted File Index&#xff08;IVF&#xff09;的名字由来&#xff1a; IVF索引的名字源自“倒排文件”&#xff08;Inverted File&#xff09;的概念。在传统的信息检索中&#xff0c;倒排文件是一种索…

win10彻底让图标不显示在工具栏

关闭需要不显示的软件 打开 例此时我关闭了IDEA的显示 如果说只是隐藏&#xff0c;鼠标拖动一个道理 例QQ 如果说全部显示不隐藏

关税核爆72小时!跨境矩阵防御战紧急打响

一、T86崩塌&#xff1a;全球贸易链的至暗时刻 &#xff08;配图&#xff1a;美国海关系统深夜弹出红色警报&#xff09; 5月2日凌晨2:17&#xff0c;杭州某光伏企业的供应链系统突然发出刺耳警报——其价值1800万美元的逆变器模块被划入34%关税清单。这场代号"黑天鹅突…

蓝桥杯Java B组省赛真题题型近6年统计分类

困难题 题号题型分值代码量难度通过率内容2024-F解答1581困难0.12最短路问题 Dijkstra 期望2024-G解答20116困难0.19模拟 暴力 搜索 DFS 剪纸 枚举2023-H解答2070困难0动态规划2022-H解答20109困难0.032022-J解答25141困难0搜索2021-H解答2041困难0.18二分 思维 规律2021-I解答…