----------------注释方式-----------------------
-- 单行注释
--[[
多行注释
]]
---------------基本数据类型---------------------
-- 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)
-----------------------------------------------
---------------------Table---------------------
-----------------------------------------------
-- 定义一个空的table
t = {}
-- -1,0,1,2 是自定义索引(可以理解为键)
-- 设置表t的键是-1,值也是-1
t[-1] = -1
t[0] = 0
t[1] = 1
t[2] = 2
t[3] = 3
t["long"] = 18
print(t[0])
print(t["long"])
-----------------------------------------------
t =
{
-- 两个元素之间用逗号隔开
-- 没有指定键值的,比如80,默认下标是1,依次类推
age = 20,
80,
101,
LC = {age = 20, sex = "man",1997},
}
------table成员的读操作------------
-- 会输出nil,因为table的下标如果没有手动指定,默认从1开始
print(t[1])
print(t["LC"]["age"]) -- 输出20
print(t["LC"][1]) -- 1997
print(t["LC"].sex) -- 也可以用.的方式访问
------table成员的写操作------------
t["age"] = 18
print(t["age"])
-----------------------------------------------
Rain =
{
age,
grow = function (self2,testInt)
self2.age = self2.age + 1
print(testInt)
end
}
Rain.age = 18
-- 模拟面向对象,传参的第一种方式
Rain.grow(Rain,999)
print(Rain.age)
-- 模拟面向对象,传参的第二种方式
-- 如果方法有2个参数,第一个参数默认是调用者本身,只需传第2个参数,如下
Rain:grow(998)
print(Rain.age)
-----------------------------------------------
t2 = {
18,
1,
3,
5,
8,
name = "Rain",
age = 28
}
-- 输出数组的长度 #(表名),只计算【没有手动指定键】的元素个数
print(#(t2))
------------------冒泡排序----------------------
n = #(t2)
for i=1,n do
for j=1,n-i do
if t2[j] > t2[j + 1] then
temp = t2[j]
t2[j] = t2[j + 1]
t2[j + 1] = temp
end
end
end
for i=1,n do
print(t2[i])
end
-----------------------------------------------
----------------以索引和值的形式输出---------------
---依然不能识别手动指定过的键
for index,value in ipairs(t2) do
print(index,value)
end
----------------以键值对的形式输出所有表成员---------
for key,value in pairs(t2) do
print(key,value)
end
-----------------------------------------------
-----------------------------------------------
-----------------------------------------------
--------------------表继承----------------------
Person = {
name,
age = 18,
Eat = function (food)
print("吃"..tostring(food))
end
}
Sivan = {
Test_Sivan = function ( )
print("Sivan测试")
end
}
-- 设置表继承
setmetatable(
Sivan,
-- 必须使用双下划线
{__index = Person}
)
print(Sivan.age)
Sivan.Eat("shit")
-----------------------------------------------
Person2 = {
name,
age = 18,
Eat = function (food)
print("吃"..tostring(food))
end,
new = function (self)
obj = {}
setmetatable(obj,{__index = self})
return obj
end
}
Sivan2 = Person2:new();
Sivan2.Eat("shit2")
-- 定义一个继承
Sivan3 = Person2:new();
Sivan3.AddFunc = function ()
print("新增加的新方法")
end
Sivan3.AddFunc()
【Lua】lua的基本语法
最新推荐文章于 2024-06-30 06:32:21 发布