关闭

【Lua基础】Lua基本用法

标签: lua
264人阅读 评论(0) 收藏 举报
分类:

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





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:43954次
    • 积分:745
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:8篇
    • 译文:0篇
    • 评论:12条
    文章分类
    最新评论