Lua 基础 -- 学习笔记

标签(空格分隔): Lua


1. Lua可以一次性给多个变量赋值

  • 变量比赋值多,多的变量就赋值nil
  • 变量比赋值少,多的赋值舍弃
local a, b, c = 1, 2, 3
print( a, b, c)
local a, b, c = 1, 2
print(a, b, c)
local a, b, c = 1, 2, 3, 4
print(a, b, c)

输出:
1	2	3
1	2	nil
1	2	3

2. lua代码块

do ... 
end

3.lua控制语句

3.1 条件判断

if ... then
...
elseif ... then
...
else
...
end

3.2 循环迭代
3.2.1 repeat ... until true --> 条件成立退出

local a = 1
repeat
	print(a)
	a = a + 1
until a >= 2

输出:1

3.2.2 while ... do ... end --> 条件不成立退出

local i = 1
while i < 3 do
	print(i)
	i = i + 1
end

输出:
1
2

3.2.3 for from, to, step do ... end step可以省略,默认不写的话是每次加1

for i=1, 2 do
	print(i)
end

-- 上下程序作用一样
for i=1, 2, 1 do
	print(i)
end

输出:
1
2
1
2

3.2.4 迭代函数ipairs 和pairs,ipairs只针对有序表,其中ipairs循环中如果遇到nil,循环就结束了

local list = {1, 2, 3, a = 12, b = 14}
for i,v in ipairs(list) do
	print(i, v)
end

输出:
1	1
2	2
3	3

local list = {1, 2, 3, a = 12, b = 14}
for i,v in pairs(list) do
	print(i, v)
end

输出:
1	1
2	2
3	3
a	12
b	14

local list = {1, nil, 2, 3, a = 12, b = 14}
for i,v in ipairs(list) do
	print(i, v)
end

输出:
1	1

4. function

4.1 闭包函数

function closureFunction(x)
	return function ()
		x = x + 1
		print(x)
	end
end

local f = closureFunction(100)
print(f())
print(f())
print(f())
local ff = closureFunction(200)
print(ff())

输出:
101
102
103
201

只要f没有销毁,x值就变相的成为全局变量(相对于f调用),如果是重新调用closureFunction还是原来的值

4.2 函数尾调用

  • 形式:就是在函数的最后返回处返回函数
  • 作用:可以解决例如递归时堆栈过大问题,因为尾调用的一个性质就是直接进入尾调用函数的堆栈并且抛弃现在在使用函数的堆栈,也就是说,进入尾调用函数后是不会恢复上一个函数的堆栈的
function closureFunction(x)
	return function ()
		x = x + 1
		print(x)
	end
end

local function recursionFunction( x )
	if x > 1 then
		return recursionFunction(x - 1)
	else
		return print('done')
	end
end

recursionFunction(99999)

4.3 函数的不定参数

function functionName( ... )
---[=[ 
	print(#arg)
	print(unpack(arg))
--[[	local list = {...}
	print(#list)
	print(unpack(list))
	for i=1,#list do
		print(list[i])
	end
--]]
--]=]
end

functionName(1, 2, 3)
end

以上是不定参数的两种不同读取参数方法,#是用来获取字符长度或者表长度(只限于有序表)

4.4 .和:的区别

local list = {}

function list.say( helloworld )
	print(helloworld)
end

list.say("helloworld")

local list = {}

function list:say( helloworld )
	print(helloworld)
end

list:say("helloworld")
list.say("do","helloworld")

区别在于 函数参数开始时,:比.多传递了一个参数
:定义的函数可以用.来访问,.定义的函数如果用:访问一般会产生问题

5. lua中的三目运算实现

local a = 5
a = a > 4 and a or 1
print(a)

输出:
5

注意:a不能是nil或者false

posted @ 2015-06-11 10:57  zyh_think  阅读(209)  评论(2编辑  收藏  举报