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)

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

userdata(自定义类型)

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

posted @ 2019-07-20 10:54  Jaxes  阅读(456)  评论(0编辑  收藏  举报