注释:
写一个程序,总是少不了注释的。在Lua中,你可以使用单行注释和多行注释。
单行注释:连续两个减号“–”表示注释的开始,直到行末为止。
多行注释:由“–[[” 表示注释开始,并 且一直延续到“–]]”为止。
快捷方式是Ctrl+k+c Ctrl+k+u
--print("hello world")
--[[
function fact (n)
if n == 0 then
return 1
else
return n * fact(n-1)
end
end
print("enter a number:")
a = io.read() -- read a number
print(fact(a))
--]]
暂停
os.execute("pause")
标识符:
字母(letter)或者下划线开头的字母、下划线、数字序列。最好不要使用下划线加大写字母的标识符。
注意:Lua大小写敏感。
合法的标识符 非法标识符
HelloWorld and(关键字)
_983 983(纯数字)
_name hello world(特殊符号)
保留字:
Lua语言中一些赋以特定的含义,用做专门用途的字符串。以下字符为Lua保留字,不能当做标识符。
and break do else elseif end false for function if in local nil not or repeat return then true until
while
变量:
变量在使用前,必须在代码中进行声明,即创建该变量。
编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值。
Lua 变量有三种类型:全局变量、局部变量、表中的域。
Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显示声明为局部变量。
局部变量的作用域为从声明位置开始到所在语句块结束。
变量的默认值均为 nil。
基本数据类型:
Lua是动态类型语言,变量不用类型定义。(类型的检查是在运行时做的)
a=5
print(a)
Lua中定义了8个基本类型:
nil(空)、boolean、number(所有数值类型)、string、userdata、 function、thread和table
--region *.lua
--Date
--此文件由[BabeLua]插件自动生成
--print("hello world")
--关键字 function
--then end 代替C#中的大括号{}
--注释 多行注释
--[[
function fact (n)
if n == 0 then
return 1
else
return n * fact(n-1)
end
end
print("enter a number:")
a = io.read() -- read a number
print(fact(a))
--]]
--nil类型
--[[
--输出a的值
print(a)
--输出a的类型
print(type(a))
--]]
--不需要声明类型 动态检查变量类型
--不支持UTF8格式(汉字)
--boolean类型
--[[
b = ""
if (b) then
print("true")
else
print("false")
end
--]]
--number类型
--[[
a = 123
b = 1.23
c = 1.23456789
d = -123
print(type(a))
print(type(b))
print(type(c))
print(type(d))
--]]
--string字符串类型
--[[
a = "asdf"
b = 'asdf'
--自动将字符串当数字操作
print("10"+1)
print('10'+'1')
--print("a"+1)
--拼接时需要用..运算符
print("a"..1)
--转义字符
c="asdf\nghjk"
print(c)
--]]
--[[
--大小写
a= 'aaBBccDD'
print(string.upper(a))
print(string.lower(a))
--替换
print(string.gsub(a,'cc','zz',2))
--长度
print(string.len(a))
--查找(下标从1开始)(区分大小写)
print(string.find(a,'DD'))
print(string.find(a,'dd'))
--截取
print(string.sub(a,1,2))
--]]
--function函数类型
--函数当返回值
--[[
function Debug(a)
print(a)
end
Debug("asdfasdg")
a=Debug
print(a)
print(type(Debug))
function Foo()
return Debug
end
b =Foo
--a("asdfasdg")
print(b)
--]]
--函数当为参数
--[[
function Debug(a)
print(a)
end
b=Debug
function Foo(b)
b("asdf")
end
Foo(b)
print(Foo(b))
print(b)
--]]
--全局变量和局部变量
--只看有没有local
--[[
function Foo()
a = 10
local b =20
end
Foo()
print(a)
print(b)
--]]
--[[
--波浪等于感叹号
a= 10
b=20
if(a~=b)then
print("a!=b")
else
print("a==b")
end
--]]
--[[
--选择结构
if(true)then
print('AAA')
end
if (true)then
print('true')
else
print("flase")
end
a=10
if(a<10)then
print('aaa')
elseif(a<20)then
print('BBB')
elseif(a<30)then
print('CCC')
end
--]]
--[[
--循环结构 while
a=0
while(a<10)do
a=a+1
print(a)
end
--do while
a=0
repeat
a=a+1
print(a)
until(a==10)
--]]
--[[
--for语句
for i=0,100,3 do
print(i)
end
for i =0,100,1 do
if (i%3==0)then
print(i)
end
end
--泛型循环
a={5,6,4,3,}
color ={"red","green","blue","black"}
for k,v in ipairs(a) do
print(k,v)
end
for k,v in ipairs(color) do
print(k,v)
end
--]]
--[[
for i =0,10,1 do
if(i==3)then
break
--打断整个
--return
end
print(i)
end
--]]
--[[
--ipairs 在遍历的时候只能遍历key为整数的
a={8,9,5,6,7}
for key,value in ipairs(a) do
print(key,value)
end
--pairs 在遍历的时候 不受任何影响
color ={aa="red",bb="green",cc="blue",dd="black"}
for key,value in pairs(color) do
print(key,value)
end
color ={aa="red","green","blue","black"}
for key,value in pairs(color) do
print(key,value)
end
--]]
--[[
--遍历
arr ={2,3,4,1}
print(table.concat(arr,"=="))
--插入
table.insert(arr,2,100)
print(table.concat(arr,"=="))
--移除
table.remove(arr,1)
print(table.concat(arr,"=="))
--排序
table.sort(arr)
print(table.concat(arr," "))
--]]
--[[
--数组模拟
arr ={21,23.45,-456,123465789798}
arr[5] =132456
print(arr[2])
for key,value in pairs(arr) do
print(key,value)
end
--字典模拟
color={r="red",g="green",b="blue"}
print(color.b)
print(color.g)
color.a="alpha"
for key,value in pairs(color) do
print(key,value)
end
--]]
--[[
--list 模拟泛型
List ={"aa","bb","cc","dd"}
function ListAdd(str)
table.insert(List,str)
end
ListAdd("ee")
ListAdd("ff")
print(table.concat(List," "))
function ListRemove(index)
table.remove(List,index)
end
ListRemove(2)
ListRemove(2)
print(table.concat(List," "))
--]]
--[[
Queue ={"aa","bb","cc","dd"}
--入队
function Enqueue(str)
table.insert(Queue,str)
end
--出队
function Dequeue()
result =Queue[1]
table.remove(Queue,1)
return result
end
Enqueue("ee")
print(table.concat(Queue," "))
Enqueue("ff")
print(table.concat(Queue," "))
Dequeue()
print(table.concat(Queue," "))
Dequeue()
print(table.concat(Queue," "))
--]]
--[[
--栈模拟
Stack ={"aa","bb","cc","dd"}
--压栈
function Pull(str)
table.insert(Stack,str)
end
--出栈
function Push()
lastIndex =Stack.len
result =Stack[lastIndex]
table.remove(Stack,lastIndex)
return result
end
Pull("ee")
print(table.concat(Stack," "))
Pull("ff")
print(table.concat(Stack," "))
Push()
print(table.concat(Stack," "))
Push()
print(table.concat(Stack," "))
--]]
--[[
--闭包:函数嵌套的时候,内部函数可以访问外部函数的局部变量
function Foo()
local a ="AAA"
function Foo1()
print(a)
end
Foo1()
end
Foo()
--]]
--string.find()
--table.remove()
--[[
MyMath ={}
MyMath.Add =function (a,b)
return a + b
end
MyMath.Sub =function (a,b)
return a - b
end
--]]
--[[
MyMath ={
Add= function (a,b)
return a + b
end,
Sub= function (a,b)
return a - b
end
}
--]]
--[[
MyMath ={}
function MyMath.Add(a,b)
return a + b
end
function MyMath.Sub(a,b)
return a - b
end
print(MyMath.Add(1,1))
print(MyMath.Sub(2,2))
--]]
--[[
--用表模拟委托 委托的实质 是一个带签名的函数列表
Action ={}
function AddListener(func)
table.insert(Action,func)
end
function Invoke()
for i = 1,3,1 do
Action[i]()
end
end
a = function() print("aa")end
b = function() print("bb")end
c = function() print("cc")end
AddListener(a)
AddListener(b)
AddListener(c)
Invoke()
--]]
--[[
--用表模拟对象
Weapon ={}
Weapon.name ="Ak47"
Weapon.attackDistance =20
Weapon.hurt=10
Weapon.Fire =function(hurtValue) print("Ak47 fire"..hurtValue) end
Weapon.FireEffect =function() print ("AK47 fire effect")end
print(Weapon.name)
Weapon.FireEffect()
Weapon.Fire(Weapon.hurt)
--]]
--[[
--用表模拟实例化对象
CreateWeapon ={}
--构造器
CreateWeapon.Weapon =function(name,attackDistance,hurt)
--local Weapon ={}
Weapon.name ="Ak47"
Weapon.attackDistance =20
Weapon.hurt=10
Weapon.Fire =function(name, hurtValue) print(name.."fire"..hurtValue) end
Weapon.FireEffect =function(name) print (name.. " fire effect")end
end
ak47 =CreateWeapon.Weapon("ak47","20",10)
m16 =CreateWeapon.Weapon("m16","30",30)
ak47.FireEffect(ak47.name)
ak47.Fire(ak47.name,ak47.attackDistance)
--]]
--using MyMath 相当于一个代码块的引用
--引用过来的代码块 返回值是一张表 当做对象来用
a = require("MyMath")
print(a.Add(1,2))
print(a.Sub(1,2))
a.PublicFoo()
--a.PrivateFoo()
a.PrivateFooEnter()
--暂停
os.execute("pause")
--endregion