博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Lua】lua的基本语法
阅读量:4086 次
发布时间:2019-05-25

本文共 5265 字,大约阅读时间需要 17 分钟。

----------------注释方式------------------------- 单行注释--[[多行注释]]---------------基本数据类型----------------------- nil 空值-- boolean bool类型-- number 数字类型-- string 字符串-- table 表-- function 函数---------------变量的定义------------------------- 定义全局变量Global = 10print(Global)-- 定义局部变量local x = 1print(x)-- 变量的默认值为nillocal c print(c)  -- 输出结果为nil-- 定义变量,申请内存,变量是对这块内存的引用-- 当这块内存没有被引用时,该内存会被回收a = 10c = aprint(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("\"\"") --  斜杠\取消双引号的意义,作为普通字符输出---------------字符串操作-------------------------- 字符串可以与数字相加,输出20print("10" + 10)-- ..字符串拼接符print("name:".."LC")print("LC age "..30)myString = "88"myNumber = 10myNumber = tonumber(myString)print(myNumber) -- 打印88myString = 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,其他的值都为真,包括0temp = 1997if temp then	print("判断")	print(temp)end---------------逻辑运算符---------------------------  and 相当于C#中的  &&--  or  相当于C#中的  ||--  not 相当于C#中的  !---------------逻辑运算符 and ---------------------- 参与判断的两个变量,【都为假】的时候返回【前者】-- 因为只要有一个变量为假就不需要继续判断,所以返回前者print(nil and false) -- 输出nilprint(false and nil) -- 输出false-- 参与判断的两个变量,【都为真】的时候,返回【后者】-- 因为需要两个变量都为真才为真,所以无论多少变量,都需要判断到最后一个,所以返回后者print(18 and 19)     -- 输出19print(20 and 21)     -- 输出21-- 参与判断的两个变量,一真一假的时候,返回【假的值】print(10 and nil)    -- 输出nilprint(nil and 18)    -- 输出nil--【总结:不管什么情况,都会返回那个能结束当前判断的变量】---------------逻辑运算符 or ----------------------print(99 or 100) -- 输出99--【总结:不管什么情况,都会返回那个能结束当前判断的变量】-----------------循环------------------------------- while循环temp = 8while 18 > temp do	temp = temp + 1	print("18大于17")end-- do..while循环i = 0repeat	print(i)	i = i + 1until 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 =5for 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 + bendprint(Add1(10,90))--  方法参数可以传递任意个p = function (a,b)	print(a)	print(b)endprint(p(12))-- 可以同时返回多个值,代替了C#中out参数func = function ( )	return 1,2,3,4enda,b,c,d = func();print(d)--------------------------------------------------------------------Table---------------------------------------------------------------------- 定义一个空的tablet = {}-- -1,0,1,2 是自定义索引(可以理解为键)-- 设置表t的键是-1,值也是-1t[-1] = -1t[0] = 0t[1] = 1t[2] = 2t[3] = 3t["long"] = 18print(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"]) -- 输出20print(t["LC"][1]) 	  -- 1997print(t["LC"].sex) 	  -- 也可以用.的方式访问------table成员的写操作------------t["age"] = 18print(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			endendfor 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("新增加的新方法")endSivan3.AddFunc()

转载地址:http://dukii.baihongyu.com/

你可能感兴趣的文章
nvm 和 nrm 的安装与使用
查看>>
React Hooks 一步到位
查看>>
React Redux常见问题总结
查看>>
前端 DSL 实践指南
查看>>
ReactNative: 自定义ReactNative API组件
查看>>
cookie
查看>>
总结vue知识体系之实用技巧
查看>>
PM2 入门
查看>>
掌握 TS 这些工具类型,让你开发事半功倍
查看>>
前端如何搭建一个成熟的脚手架
查看>>
Flutter ListView如何添加HeaderView和FooterView
查看>>
Flutter key
查看>>
Flutter 组件通信(父子、兄弟)
查看>>
Flutter Animation动画
查看>>
Flutter 全局监听路由堆栈变化
查看>>
Android 混合Flutter之产物集成方式
查看>>
Flutter混合开发二-FlutterBoost使用介绍
查看>>
Flutter 混合开发框架模式探索
查看>>
Flutter 核心原理与混合开发模式
查看>>
Flutter Boost的router管理
查看>>