Lua学习笔记(一)

注释

-- 单行注释

--[[
多行注释
]]

-- 等号数量只要两边一致便可
--[=[多行注释]=]

标识符

A-Z、a-z、下划线_开头后加上0个或多个字母、下划线、数字(0-9)数组

注意:最好不要使用下划线加大写字母,Lua保留字也是如此数据结构

不容许特殊字符@、$、%定义标识符函数

区分大小写测试

关键词

-- Lua的保留关键字
and break do else elseif end false for function if in local nil not or repeat return then true until while
-- 通常约定,如下划线开头链接一串大写字母的名字(如_VERSION)被保留用于Lua内部全局变量
_VERSION

全局变量

--[[
默认状况下变量认为是全局的,不须要声明,赋值后即建立了这个全局变量,访问一个没有初始化的全局变量不会出错,会返回nil
--]]
print(b) -- 返回nil
b=10
print(b) -- 返回10
-- 若是要删除一个全局变量,只须要将变量赋值为nil
b=nil
print(b) -- 返回nil

数据类型

-- Lua是动态类型语言,不须要定义,只须要赋值。值能够储存在变量中,做为参数传递或结果返回
-- 8个基本类型nil、boolean、number、string、userdata、function、thread、table
--[[
nil			只有值nil属于该类,表示一个无效值(在条件表达式中至关于false)
boolean		包含两个值:false和true
number		双精度类型的实浮点数
string		字符串由一对双引号或单引号来表示
function	由C或Lua编写的函数
userdata	表示任意存储在变量中的C数据结构
thread		表示执行的独立线程,用于执行协程
table		Lua中的表是一个“关联数组”,数组的索引能够是数字、字符串或表类型。在Lua里,table的建立时经过“构造表达式”来完成,最简单构造表达式是{},用来建立一个空表
]]
type() -- 该函数能够测试给定变量或者值得类型

nil(空)

-- nil类型表示没有任何有效值,它只有一个值nil
print(type(a)) -- 输出nil
-- 对于全局变量和table,nil有删除的做用
tab1={key1="val1",key2="val2","val3"}
for k,v in pairs(tab1) do
    print(k .. " - " .. v) -- ..运算符用于链接字符串
end

tab1.key1=nil
for k,v in pairs(tab1) do
    print(k .. " - " .. v)
end

boolean(布尔)

-- 只有两个可选值:false、true,Lua把false和nil看做是“假”,其余的都为真
if false or nil then
    print("至少有一个是true")
else
    print("false和nil都为false!")
end
-- 执行结果为false和nil都为false!

number(数字)

-- Lua默认只有一种number类型 double(双精度)类型
print(type(2))		-- 输出number
print(type(2e+1))	-- 输出number

string(字符串)

string1="this is string1"
string2="this is string2"
-- 也能够用两个方括号“[[]]”来表示“一块”字符串,输出时会将换行和制表等格式也输出
string3=[[
emmmmmmmmmm
aaaaaaaaaaa
ruaruaruaruarua!
]]
-- 对一个数字字符串进行算术操做,Lua会尝试将这个数字字符串转成一个数字
print("2"+6)		-- 输出8.0
print("-2e2"*"6")	-- 输出-1200.0
-- 字符串链接使用..操做符,注意操做对象若是为数字,则操做对象与操做符之间须要加空格
print("2".."b")		-- 输出2b
print(233 .. 666)	-- 输出233666
-- 使用#来计算字符串长度,放在字符串前面
len="www.rua.com"
print(#len)				-- 输出11
print(#"helloworld")	-- 输出10

table(表)

-- 建立一个空表
local tbl1={}
-- 直接初始表
local tbl2={"a","b","c","d"}
-- 建立键值对
a["key"]="value"
a[1]=22
key=10	-- 这里只是赋值,赋值后用于后面的建立键值对
a[key]=22
a[a[key]]=a[key]+11
-- 在Lua中,默认初始索引通常以1开始
local tb1={"a","b","c"}
for key,val in pairs(tb1) do
    print("Key",key)
end
--[[
输出:
Key 1
Key 2
Key 3
]]
-- table的长度是动态增加的

function(函数)

-- 在Lua中,函数是被看做“第一类值(First-Class Value)”,函数能够存在变量里
function fun1(n)	-- 一个递归求阶乘的函数
    if n == 0 then
        return 1
    else
        return n*fun1(n-1)
    end
end
print(fun1(5))		-- 输出120
fun2=fun1
print(fun2(5))		-- 输出120
-- 也能够使用匿名函数的形式
function testFun(tab,fun)
    for k,v in pairs(tab) do
        print(fun(k,v))
    end
end

tab={kay1="val1",key2="val2"}
testFun(tab,
	function(key,val)
        return key .. "=" .. val
	end
)
--[[
执行结果:
key1=val1
key2=val2
]]

thread(线程)

Lua中主要的线程是协程(coroutine)this

线程能够同时多个运行,协程任意时刻只能运行一个lua

userdata(自定义类型)

用户自定义数据,用于表示一种由应用程序或C/C++语言库所建立的类型,能够将任意C/C++的任意数据类型的数据(一般是struct和指针)存储到Lua变量中调用spa

相关文章
相关标签/搜索