BasicSyntax.lua
--#!/usr/bin/lua -- 告诉操作系统所使用lua解释器的路径(这里是Linux系统路径)
-- 这里是单行注释
--[[
这里是
多行注释
]]
--[=[
这里是
多行注释
]=]
-- 代码块 (使用关键字)
if (true)
then
result = "这里会输出,1"
print (result)
else
result = "这里不会输出"
print (result)
end
print "这里会输出,2"
-- 多行语句 (直接跨行)
a=5
b=6
c=a
+b
print (a
+b) print (c)
VariablesAndDataTypes.lua
------------------------------------ 数据类型 ------------------------------------
-- nil无效值(条件表达式中相当于false)
print(nil_)
-- Boolean布尔值(只有false与true )
bool_ = true
print(bool_) --> nil
print(type(bool_) , bool_) --> boolean true
-- Number数字(双精度double)
number_ = 5
print(type(number_) , number_) --> number 5
-- String字符串(用一对单引号或双引号表示)
string_ = "我是字符串"
print(type(string_) , string_) --> string 我是字符串
-- Function函数
function function_()
end
print(type(function_) , function_) --> function function: 003CA1C0
-- table表(关联数组,数组的索引可以是数字或字符串)
table_ = { "BeiJiaan",173,25,63.5,"man" }
print(table_) --> table: 003C4620
for k,v in ipairs(table_) do
print(k,v) --> 1 BeiJiaan / 2 173 / ...
end
table_ = { name="BeiJiaan",height=173,age=25,weight=63.5,sex="man"}
print(table_) --> table: 003C4800
for k,v in pairs(table_) do
print(k,v) --> name BeiJiaan / height 173 / ...
end
-- userdata(表示任意存储在变量中的C数据结构)
--
-- thread线程(表示执行的独立线路,用于执行协同程序)
--
-- 变量类型转换(lua的变量类型是动态的,不用指定类型)
a = 1
print(type(a)) --> number
a = "string"
print(type(a)) --> string
--[=[ 《补充》
1. Lua会自动在sring和numbers之间自动进行类型转换:
a. 当一个字符串遇到算数操作时,string会自动转换为数字 print("1"+1) => 输出2
b. 当字符串连接数字时,数字会自动转化为string print("i am " .. 25 .. "years old;") => 输出i am 25 years old;
2. Lua是从1开始排序的(如table表),在使用pairs遍历时,会先按照数字顺序输出,再轮到键值对;
3. table表的索引有2种:
value = t["key"]
value = t.key
4. boolean只有两个值:true和false;Lua把false和nil看作“假”,其他都为“真”;
5. numbers只有double双精度类型;
6. string字符串可以使用一对单引号或者双引号来表示,也可以使用 [[ ]] 来表示一块字符串;
7. string字符串可以使用#号来计算字符串长度;如:#str / #"hello"
8. function可以以匿名函数的方式通过参数传递;
]=]
------------------------------------ 变量 ------------------------------------
-- 所有未创建的变量值都是nil;
print(b) --> nil
-- 删除变量(直接赋值nil,lua会回收其所占内存)
a = nil
print(a) --> nil
-- 多变量赋值(多余的为nil或舍弃)
a,b,c = 1,2
print(string.format("a = %d ; b = %d ; c = ",a,b),c) --> a = 1 ; b = 2 ; c = nil
-- 交换变量值(利用lua赋值时先计算值再赋值的特性)
a,b=b,a
print(string.format("a = %d ; b = %d ;",a,b)) --> a = 2 ; b = 1 ;
--[=[ 《补充》
1. nil还有一个“删除”的作用,给全局变量或者table表里的变量赋nil值,等同于把它们删掉;
]=]
------------------------------------ 变量作用域 ------------------------------------
-- 全局变量(lua中没有块级作用域)
val1 = "val"
if (true) then
val1 = "val1"
val2 = "val2"
end
print(val1) --> val1
print(val2) --> val2 (块中定义的,在外界一样可以访问)
-- 局部变量(只有使用local声明的才是局部变量,其余块或函数里面的都是全局变量)
function fun()
val3 = "val3"
end
fun()
print(val3) --> val3(调用函数后,就创建了val3变量,外部就可以访问)
if (true) then
local val4 = "val4"
end
print(val4) --> nil(local局部变量的作用域为从声明处到所在语句块结束处)
-- 作用域链(local局部变量的作用域为从声明处到所在语句块结束处)
val = 1
function f1()
val = 2
function f2()
val = 3
print(val) --> 3
end
f2()
end
f1()
print(val) --> 3
val = 1
function f1()
local val = 2
function f2()
val = 3
print(val) --> 3 (会变量会先向外层寻找,直到寻找到为止)
end
f2()
print(val) --> 3
end
f1()
print(val) --> 1