<pre name="code" class="plain">----------------注释方式-----------------------
-- 单行注释
--[[
多行注释
]]
---------------基本数据类型---------------------
-- nil 空值
-- boolean bool类型
-- number 数字类型
-- string 字符串
-- table 表
-- function 函数
---------------变量的定义-----------------------
-- 定义全局变量
Global = 10
print(Global)
-- 定义局部变量
local x = 1
print(x)
-- 变量的默认值为nil
local c
print(c) -- 输出结果为nil
-- 定义变量,申请内存,变量是对这块内存的引用
-- 当这块内存没有被引用时,该内存会被回收
a = 10
c = a
print(c) -- 值为10
-- 同时赋值多个变量
q,w,e,r = 1,2,3,4
---------------输出---------------------------
-- print相当于WriteLine,自带回车
print("换行的输出")
-- io.write相当于Write,不带回车
io.write("不换行的输出")
---------------输入---------------------------
-- 在终端中输入: lua 文件路径 (回车运行)
print("请输入一个值")
n = io.read()
print(n)
---------------转义字符------------------------
print("\n表示换行")
print("\"\"") -- 斜杠\取消双引号的意义,作为普通字符输出
---------------字符串操作------------------------
-- 字符串可以与数字相加,输出20
print("10" + 10)
-- ..字符串拼接符
print("name:".."LC")
print("LC age "..30)
myString = "88"
myNumber = 10
myNumber = tonumber(myString)
print(myNumber) -- 打印88
myString = tostring(2015)
print(myString) -- 打印2015
---------------关系运算符------------------------
-- > < >= <= == ~=
print( 18 ~= 19)
---------------if语句---------------------------
--【第一种】
if 19 > 18 then
print("是的,19大于18")
end
--【第二种】
if 19 < 18 then
print("并不输出哦")
else
print("是的,怎么可能小于18")
end
--【第三种】
if 18 < 19 then
print("yes")
elseif 10 > 9 then
print("10>9")
else
print("default")
end
-- 除了nil和false,其他的值都为真,包括0
temp = 1997
if temp then
print("判断")
print(temp)
end
---------------逻辑运算符-------------------------
-- and 相当于C#中的 &&
-- or 相当于C#中的 ||
-- not 相当于C#中的 !
---------------逻辑运算符 and --------------------
-- 参与判断的两个变量,【都为假】的时候返回【前者】
-- 因为只要有一个变量为假就不需要继续判断,所以返回前者
print(nil and false) -- 输出nil
print(false and nil) -- 输出false
-- 参与判断的两个变量,【都为真】的时候,返回【后者】
-- 因为需要两个变量都为真才为真,所以无论多少变量,都需要判断到最后一个,所以返回后者
print(18 and 19) -- 输出19
print(20 and 21) -- 输出21
-- 参与判断的两个变量,一真一假的时候,返回【假的值】
print(10 and nil) -- 输出nil
print(nil and 18) -- 输出nil
--【总结:不管什么情况,都会返回那个能结束当前判断的变量】
---------------逻辑运算符 or ----------------------
print(99 or 100) -- 输出99
--【总结:不管什么情况,都会返回那个能结束当前判断的变量】
-----------------循环-----------------------------
-- while循环
temp = 8
while 18 > temp do
temp = temp + 1
print("18大于17")
end
-- do..while循环
i = 0
repeat
print(i)
i = i + 1
until i >= 10
-- for循环
for j=1,-10,-1 do
print(j)
end
-- 实心菱形
for y=4,-4,-1 do
for x=-4,4,1 do
if(math.abs(x) + math.abs(y) <= 4) then
io.write("*")
else
io.write(" ")
end
end
print("");
end
-----------------菱形------------------------------
--[[
*********
**** ****
*** ***
** **
* *
** **
*** ***
**** ****
*********
]]
n =5
for i=n - 1,-(n - 1), -1 do
for j=-(n - 1),(n - 1), 1 do
if math.abs(i) + math.abs(j) >= n - 1 then
io.write("*")
else
io.write(" ")
end
end
print()
end
--第198行, >= 改成<=就是空心菱形
---------------------function---------------------
function Add1(a,b)
return a + b
end
print(Add1(10,90))
-- 方法参数可以传递任意个
p = function (a,b)
print(a)
print(b)
end
print(p(12))
-- 可以同时返回多个值,代替了C#中out参数
func = function ( )
return 1,2,3,4
end
a,b,c,d = func();
print(d)<pre name="code" class="plain">--表类型,类似数组,实为键值对
t = {}
t[0] = 101
t[1] = 1
t[2] = 100
for i=0,2 do
print(t[i])
end
--键值对元素要用逗号隔开
t =
{
100,
age = 80,
xiaoyu = {sex = women, age = 10,200},
101
}
print(t[0]) --nil
print(t[1]) --100 索引从1开始
--通过key取value方法
print(t["age"])
print(t.age)
print(t["xiaoyu"].age)
print(t["xiaoyu"]["age"])
print(t["xiaoyu"][1]) -- 输出200,说明没赋键值的默认从1开始
xiaoyu =
{
age,
grow = function(self)
--传入参数self代替this
self.age = self.age + 1
end
}
xiaoyu.age = 18
--模拟面向对象传参赋值
xiaoyu.grow(xiaoyu)
--第二种方式
--那个表调用函数,self就被赋值为那个表
xiaoyu:grow()
print(xiaoyu.age)
t =
{
1,3,5,
name = "xiaoyu",
age = 18,
10
}
--求数组长度,结果为4 说明计算长度只能算索引为整数的成员
print(#(t))
--遍历表索引为整数的成员
for i,v in ipairs(t) do
print(i,v)
end
--遍历所有成员 但是先后顺序为先输出整数成员再输出其他
for k,v in pairs(t) do
print(k,v)
end
--将表进行冒泡排序
for i=1,#(t)-1 do
for j=i+1,#(t) do
if t[i] < t[j] then
t[i] = t[i] + t[j]
t[j] = t[i] - t[j]
t[i] = t[i] - t[j]
end
end
end
for i=1,#(t) do
print(t[i])
end
Person =
{
age,
height,
eat = function ( food )
print("吃"..food)
end,
--手写方法创建子对象
new = function ( self )
obj = {}
setmetatable(obj,{__index = self})
return obj
end
}
-- xiaoyu = Person:new()
-- xiaoyu.eat("meat")
-- LSL = Person:new()
-- LSL.lu = function ( )
-- print("...")
-- end
xiaoyu =
{
huazhuang = function ( )
print("huazhuang")
end
}
--表继承
setmetatable(xiaoyu,{__index = Person})
xiaoyu.age = 18
print(xiaoyu.age)
xiaoyu.eat("eat")
<pre name="code" class="plain">----------------注释方式-----------------------
-- 单行注释
--[[
多行注释
]]
---------------基本数据类型---------------------
-- nil 空值
-- boolean bool类型
-- number 数字类型
-- string 字符串
-- table 表
-- function 函数
---------------变量的定义-----------------------
-- 定义全局变量
Global = 10
print(Global)
-- 定义局部变量
local x = 1
print(x)
-- 变量的默认值为nil
local c
print(c) -- 输出结果为nil
-- 定义变量,申请内存,变量是对这块内存的引用
-- 当这块内存没有被引用时,该内存会被回收
a = 10
c = a
print(c) -- 值为10
-- 同时赋值多个变量
q,w,e,r = 1,2,3,4
---------------输出---------------------------
-- print相当于WriteLine,自带回车
print("换行的输出")
-- io.write相当于Write,不带回车
io.write("不换行的输出")
---------------输入---------------------------
-- 在终端中输入: lua 文件路径 (回车运行)
print("请输入一个值")
n = io.read()
print(n)
---------------转义字符------------------------
print("\n表示换行")
print("\"\"") -- 斜杠\取消双引号的意义,作为普通字符输出
---------------字符串操作------------------------
-- 字符串可以与数字相加,输出20
print("10" + 10)
-- ..字符串拼接符
print("name:".."LC")
print("LC age "..30)
myString = "88"
myNumber = 10
myNumber = tonumber(myString)
print(myNumber) -- 打印88
myString = tostring(2015)
print(myString) -- 打印2015
---------------关系运算符------------------------
-- > < >= <= == ~=
print( 18 ~= 19)
---------------if语句---------------------------
--【第一种】
if 19 > 18 then
print("是的,19大于18")
end
--【第二种】
if 19 < 18 then
print("并不输出哦")
else
print("是的,怎么可能小于18")
end
--【第三种】
if 18 < 19 then
print("yes")
elseif 10 > 9 then
print("10>9")
else
print("default")
end
-- 除了nil和false,其他的值都为真,包括0
temp = 1997
if temp then
print("判断")
print(temp)
end
---------------逻辑运算符-------------------------
-- and 相当于C#中的 &&
-- or 相当于C#中的 ||
-- not 相当于C#中的 !
---------------逻辑运算符 and --------------------
-- 参与判断的两个变量,【都为假】的时候返回【前者】
-- 因为只要有一个变量为假就不需要继续判断,所以返回前者
print(nil and false) -- 输出nil
print(false and nil) -- 输出false
-- 参与判断的两个变量,【都为真】的时候,返回【后者】
-- 因为需要两个变量都为真才为真,所以无论多少变量,都需要判断到最后一个,所以返回后者
print(18 and 19) -- 输出19
print(20 and 21) -- 输出21
-- 参与判断的两个变量,一真一假的时候,返回【假的值】
print(10 and nil) -- 输出nil
print(nil and 18) -- 输出nil
--【总结:不管什么情况,都会返回那个能结束当前判断的变量】
---------------逻辑运算符 or ----------------------
print(99 or 100) -- 输出99
--【总结:不管什么情况,都会返回那个能结束当前判断的变量】
-----------------循环-----------------------------
-- while循环
temp = 8
while 18 > temp do
temp = temp + 1
print("18大于17")
end
-- do..while循环
i = 0
repeat
print(i)
i = i + 1
until i >= 10
-- for循环
for j=1,-10,-1 do
print(j)
end
-- 实心菱形
for y=4,-4,-1 do
for x=-4,4,1 do
if(math.abs(x) + math.abs(y) <= 4) then
io.write("*")
else
io.write(" ")
end
end
print("");
end
-----------------菱形------------------------------
--[[
*********
**** ****
*** ***
** **
* *
** **
*** ***
**** ****
*********
]]
n =5
for i=n - 1,-(n - 1), -1 do
for j=-(n - 1),(n - 1), 1 do
if math.abs(i) + math.abs(j) >= n - 1 then
io.write("*")
else
io.write(" ")
end
end
print()
end
--第198行, >= 改成<=就是空心菱形
---------------------function---------------------
function Add1(a,b)
return a + b
end
print(Add1(10,90))
-- 方法参数可以传递任意个
p = function (a,b)
print(a)
print(b)
end
print(p(12))
-- 可以同时返回多个值,代替了C#中out参数
func = function ( )
return 1,2,3,4
end
a,b,c,d = func();
print(d)<pre name="code" class="plain">--表类型,类似数组,实为键值对
t = {}
t[0] = 101
t[1] = 1
t[2] = 100
for i=0,2 do
print(t[i])
end
--键值对元素要用逗号隔开
t =
{
100,
age = 80,
xiaoyu = {sex = women, age = 10,200},
101
}
print(t[0]) --nil
print(t[1]) --100 索引从1开始
--通过key取value方法
print(t["age"])
print(t.age)
print(t["xiaoyu"].age)
print(t["xiaoyu"]["age"])
print(t["xiaoyu"][1]) -- 输出200,说明没赋键值的默认从1开始
xiaoyu =
{
age,
grow = function(self)
--传入参数self代替this
self.age = self.age + 1
end
}
xiaoyu.age = 18
--模拟面向对象传参赋值
xiaoyu.grow(xiaoyu)
--第二种方式
--那个表调用函数,self就被赋值为那个表
xiaoyu:grow()
print(xiaoyu.age)
t =
{
1,3,5,
name = "xiaoyu",
age = 18,
10
}
--求数组长度,结果为4 说明计算长度只能算索引为整数的成员
print(#(t))
--遍历表索引为整数的成员
for i,v in ipairs(t) do
print(i,v)
end
--遍历所有成员 但是先后顺序为先输出整数成员再输出其他
for k,v in pairs(t) do
print(k,v)
end
--将表进行冒泡排序
for i=1,#(t)-1 do
for j=i+1,#(t) do
if t[i] < t[j] then
t[i] = t[i] + t[j]
t[j] = t[i] - t[j]
t[i] = t[i] - t[j]
end
end
end
for i=1,#(t) do
print(t[i])
end
Person =
{
age,
height,
eat = function ( food )
print("吃"..food)
end,
--手写方法创建子对象
new = function ( self )
obj = {}
setmetatable(obj,{__index = self})
return obj
end
}
-- xiaoyu = Person:new()
-- xiaoyu.eat("meat")
-- LSL = Person:new()
-- LSL.lu = function ( )
-- print("...")
-- end
xiaoyu =
{
huazhuang = function ( )
print("huazhuang")
end
}
--表继承
setmetatable(xiaoyu,{__index = Person})
xiaoyu.age = 18
print(xiaoyu.age)
xiaoyu.eat("eat")