Lua教程(简单易懂)

1.Lua相关介绍

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

2.基础语法

注释 
	单行注释--
	多行注释 --[[内容]]--
变量
	默认是全局变量,可以访问没有赋值的全局变量
	例如:a = 100
	删除一个变量可以将其设置为nil

3.数据类型

type(变量) :可以用来查看数据的类型
nil: 表示一个无效值(在条件中==false) [比较和nil是否相同时加"或'引号将nill值包裹起来]
boolean: 布尔值包含true和false
number: 数字,表示双精度类型的实浮点数 
string: 表示字符串,用单引号或双引号表示
function: 用C或者Lua编写的程序
table: 字典,在Lua可以通过{}来创建
thread: 表示独立线路,用于执行程序
userdata: 变量中表示任何存储在C的数据结构

4.变量

全局(默认)
	格式: 变量名 = 值
局部
	格式: local 变量名 = 值
注意:只要变量前没有local全是全局变量

5.循环

1.while循环
当条件满足为true时,执行执行体内容
格式: while(条件)
		do 
			执行体
		end

2.for循环
数值for循环
	判断var等于a1或a2或a3则执行执行体内容
	格式: for var=a1,a2,a3 
			do  
		    	执行体  
			end  

泛型for循环

a = {"a", "b"}
	for i, v in ipairs(a) do
		 print(i, v)
	end 
运行结果:   1   a
		    2   b
3.repeat..until循环 
重复执行循环直到指定的条件为true为止
	格式: repeat
			执行体
		  until(条件)

6.循环控制语句

break:退出当前循环或语句
goto:控制流程无条件地转到被标记的语句处。

语法格式如下所示:
    goto Label
Label 的格式为:
    :: Label ::

实例:

local a = 1
::label:: print("我跳过来了")

a = a+1
if a < 3 then
    goto label   -- a 小于 3 的时候跳转到标签 label
end

运行结果: 我跳过来了
	      我跳过来了

7.函数

函数定义的格式:
optional_function_scope function function_name(arg1,arg2....)
	function_body
	return result_params_comma_separated
end

optional_function_scope: 该参数是可选的自定义函数是全局函数还是局部函数,未设置该参数默认为全局函数,
						 如果你需要设置为局部函使用关键字local
arg1,arg2: 函数参数,多个参数以逗号隔开,函数也可以不带参数,...为可变参数
function_body: 函数体,函数中需要执行的代码语句
result_params_comma_separated: 函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开

8.字符串

1.获取字符串长度,在字符串前加# 
	例如:print(#"aa")    结果: 2
2.字符串之间的连接是..
	例如: print(a..b)  	 结果: ab
3.字符串的表达方式有单引号/双引号/[[内容]]
	例如: s1 = "Lua"  s2='Lua'  s3=[[Lua]]

对字符串相关操作

1. string.upper("字符串")   全变大写
2. string.lower("字符串")   全变小写
3. string.gsub(mainString,findString,replaceString,num) 字符替换
	mainString: 要操作的字符串
	findString: 要替换的字符串
	replaceString: 要替换的字符
	num: 替换次数(可以忽略,则全部替换)
4. string.find(str,substr,init) 字符查询存在,返回开始索引和结束索引
	str: 源字符串
	substr: 目标字符串
	init: 从什么位置开始查询
5. string.reverse("字符串")  字符串反转
6. string.format("字符串")  返回类似printf格式化字符串
7. string.len("字符串") 返回字符串的长度
8. string.rep("字符串",n) n个拷贝字符串
9. string.sub(s,i,j) 字符串的截取
	s: 要截取的字符串
	i: 起始下标
	j: 结束下标,默认为-1
10.  string.byte("字符串")/string.char(数值)  字符串和数值相互转换
	byte("字符串",位置)	  默认选取第一个

9 数组

arr = {"a1","a2"}
for i=0,2 do
	print(arr[i])
end
-- 其中i的取值(0,1,2)
-- Lua索引从1开始,取不到值为nil
运行结果: nil
		 a1
		 a2

10.迭代器

-- for循环迭代器
for k,v in pairs(t)
	print(k,v)
end
--  ipairs: 迭代数组,不能返回 nil,如果遇到 nil 则退出

11.table相关

1.表的构建

-- 初始化表
mytable = {}

-- 指定值
mytable[1]= "Lua"

-- 移除引用
mytable = nil
--lua 垃圾回收会释放内存

2.表的操作

table.concat(table,sep,start,end) 连接表中所有元素
	table: 要连接的表名
	sep: 表中元素连接起来的分割符(可以没有)
	start: 连接表中元素的初始位置(默认为1)
	end: 连接表中元素最后位置(默认为-1)
table.insert(table,pos,value) 指定位置插入
	table: 要插入的表名
	pos: 指定位置插入value的值,(默认插入数组末尾)
table.removetable,pos,value) 指定位置删除(同插入一样)
table.getn(字典名) 获取字典长度
	或者# 实例:print(#字典名)

12模块和包

模块:

	模块类似于一个封装库,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用
	有利于代码的重用和降低代码耦合度。

require 函数加载模块

	require("<模块名>")
	或者
	require "<模块名>"

你可能感兴趣的:(编程语言,lua,开发语言)