本文共 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/