您的位置:首页 > 移动开发 > Cocos引擎

《Cocos2d-x之Lua核心编程》读书笔记:Lua基础

2016-01-29 15:07 666 查看

Lua编程

三类用户

需要一门简单的脚步语言嵌入到应用程序中的开发者

想要提高c/c++语言开发者

想要提高运行效率的脚步开发者

特点

易嵌入,可以方便的与c/c++编写的游戏逻辑互相调用

简单,不涉及任何复杂的编程概念,麻雀虽小五脏俱全

轻量,库体积很小,只有几百字节

易学习,游戏策划也能使用

高性能,对比c/c++其带来的性能损失可以忽略不计

Lua语法

命名规范

这个与C语言基本一样。

类型与值

8中基础类型:

- nil—–空

- boolean——布尔

- number—-数字

- string—-字符串

- function—-函数

- table—-表

- userdata—-自定义数据类型

- thread—–线程

code

--lua
function show_type(var)
print(type(var))
end

show_type(var)
var = 10
show_type(var)
var = "Hello world"
show_type(var)
var = print
show_type(var)
var = {}
show_type(var)


nil

nil表示一种类型,它只包含一个值nil。任何变量在未赋值前都是nil。当给一个全局变量赋值nil的时候,表示删除该变量。

boolean

boolean有两个值true和false.在lua中只有false和nil表示假,其他情况都为真,数字0也是真。

code

var = nil
if var then
print ("var is true")
else
print("var is false")
end


number

number类型表示实数,不论是浮点数还是整型数都是number类型。

code

a = 10--整型
b = 50.2--浮点数
c = 5e20--科学计数法


string

Lua中字符串表示一个字符序列。里面可以包含任意的字符,包括数字0(c/c++中的字符串终止字符),并且Lua中字符串的长度是没有限制的,即可以是空字符也可以是整本数,Lua对字符串的处理是很快的。

code

str = "I'm a string."--单行字符串
long_str = [[ I'm
a
"long",
string.
]]--多行字符串
print (str)
print (long_str)
--".."是字符串连接符
str = "I'm ".."a".." string"
print (str)
str1 = "I'm"
str2 = " a string"
print(str1..str2)
--"#"能得到字符串的长度
print (#str1)
print (#str2)
print (#str)


table

Lua中的table类似C++中的map,但是,比map更简单。

code

t = {a = "test1",b = "test2"}


表达式

算术运算符

算术运算符有:+(加),-(减),(乘),/(除),^(指数),%(取模),-(负号)*

code

a = 3
b = 5
print (a + b)
print (a - b)
print (a * b)
print (a / b)
print (a ^ b)
print (a % b)
print (-a)


关系运算符

关系运算符:<(小于),>(大于),<=(小于等于),>=(大于等于),~=(不等于),==(等于)

对于
table,userdata,function
,Lua中是以他们的引用来做比较,只有当他们指向同一个对象的时候才是相等的。


逻辑运算符

逻辑运算符有:and(与),or(或),not(非)

if not x then x = v end
可以简写为
x = x or v


字符串连接符

这个上面已经说过了,这里就不多说了。

操作符的优先级

table 构造式

默认的计数从1开始

code

t = {}--创建一个空的table
a = {x = 10,y = 20}
t = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Staturday"}
t = {
name="美女",
age = 18,
"美女背后的男人1",
"美女背后的男人2",
}
t = {}
t.name = "美女"
t.age = 18
t[1] = "美女背后的男人1"
t[2] = "美女背后的男人2"

b = {["x"] = 10,["y"] = 20,1,2,3,4}

--删除table中的一个元素
b[1] = nil
--删除table
b = nil


语句

赋值语句

关于赋值,lua里面比较有意思。

code

a = 10--正常的赋值
a,b = 10,20--相当于a = 10,b = 20
a,b = b,a--交换a,b的值,这个好简单
--函数返回多个值
function someValue()
local a,b = 10,20
return a,b
return


局部变量与块

lua中的变量也有局部变量和全局变量之分,默认定义的变量都是全局变量,定义局部变量需要添加
local


code

i = 10--全局变量
local j = i--局部变量
--代码块
if true then
--do end包围的为代码块
do
local a = 20
print (a)
end

end


控制语句

条件语句和循环

--条件判断
if a > b then
else if a > c then
end
--while循环
while a < 5 do
a = a + 1--lua中没有a += 1这种语法
end
--repeat..until循环,类似do--while
local i = 0
repeat
i = i + 1
print(i..",")
until > 3
--for循环
for var = from ,end,step do
end
for i = 0,10,1 do
print(i)
end
--for泛型
t = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Staturday"}
for k,v in pairs(t) do
print(k,v)
end


函数

函数定义

function func()
end

func = function() end

--定义对象的方法
--":"定义的函数会自动传入一个self(相当于this),"."定义的没有self传入
class = {}
function class.func1()
end
function class:func2()
end


函数参数与返回值

Lua中函数的参数可以有任意多个,当给函数传递的参数超过函数定义的形参个数时,多余的参数会被舍弃,如果少,缺少的默认值为nil.

Lua中函数返回多个参数是,所赋值的表达式不是最后的一个元素,那么函数只返回一个值用来赋值给变量.

code

function foo()
return 30,50
end
x,y = foo(),20 --x = 30,y = 20


_return返回一个函数的返回值,需要注意的死
return f()
这样的语句会把f()返回的所有值都返回,return (f())只能返回一个结果。


unpack:接受一个数组作为参数,并从下标1开始返回该数组的所有元素。

print(unpack{10,20,30})
a,b = unpack{10,20,30}--a = 10,b = 20,30被舍弃
a = {"hello","ll"}
string.find(a)


可变参数

code

function add(...)
local s = 0
for i,v in ipairs{...} do
s = s + v
end
return s
end


闭包函数

自己关于闭包的理解

code

function newCounter()
local i = 0
reutn function()
i = i + 1
return i
end
end
c1 = newCounter()--1
c2 = newCounter()--2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lua 读书笔记 编程