Lua环境搭建+Lua基本语法

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)

then

print("条件1达成")

else

print("else达成")

end

--[[

C#

if(条件){

条件达成的语句块

}

else if{

else if条件

}

else{

否则达成的语句块

}

]]

if(false)

then

print("条件1达成")

elseif(true)

then

print("elseif达成")

else

print("else达成")

end

--[[

C#

if(条件)

{

if(条件){

//进入第二层条件

}

}

]]

if(true)

then

if(true)

then

print("进入第二层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 while

do

{

循环体

}while(条件)

至少执行一次do结构体内的代码,while条件满足时,再do执行代码

]]

local num=1

repeat

print(num)

num=num+1

until(num>5) --直到条件满足时,跳出循环

-----------------------------------------------------------------------------------

--[[

do

{

if()

{

break;

}

if()

{

break;

}

if()

{

break;

}

}while(false)

]]

repeat

if(true)

then

print("此处跳出")

break

end

if(true)

then

print("此2处跳出")

end

until(true)

print("继续执行")

local data={"aa","bb","cc","dd","ee"}

--参数1:变量i的初始值,遍历Lua表,使用1

--参数2:增长到多少

--参数3:增长步长,默认值是1

for i=1,#data

do

print(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)

do

print("k:"..k..",v:"..v)

end

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

--所有数值迭代器

--相对于ipairs,所有数值迭代器去掉了i,i可以理解为int,

--去掉int的迭代器,也就去掉了连续数值索引的限定

--获取table长度的最稳定方法,就是使用所有数值迭代器获取

for k,v in pairs(data)

do

print("k:"..k..",v:"..v)

end

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

相关推荐

吸血鬼日记klaus最后究竟去哪了
office365ios版本

吸血鬼日记klaus最后究竟去哪了

📅 07-14 👁️ 2950
路由器 + VPN:轻松实现翻墙上网的终极解决方案
365BET体育投注官网

路由器 + VPN:轻松实现翻墙上网的终极解决方案

📅 08-01 👁️ 300
指南/定位鬼魂位置
office365ios版本

指南/定位鬼魂位置

📅 08-08 👁️ 3455
QQ中怎么查询q币余额和交易明细记录?
365BET体育投注官网

QQ中怎么查询q币余额和交易明细记录?

📅 07-15 👁️ 2365