关闭

【Lua】lua的基本语法

标签: lua函数全局变量局部变量boolean
6165人阅读 评论(0) 收藏 举报
分类:
----------------注释方式-----------------------
-- 单行注释

--[[
多行注释
]]

---------------基本数据类型---------------------


-- 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()




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:984223次
    • 积分:18246
    • 等级:
    • 排名:第576名
    • 原创:184篇
    • 转载:10篇
    • 译文:5篇
    • 评论:55条