Lua简单入门笔记

目录

  • 1.变量
  • 2.函数
  • 3.table
  • 4.全局表
  • 5.bool 型
  • 6.分支判断
  • 7.循环语句

1. 变量

  • 简单变量
a = 5               -- 全局变量(默认)
local b = 5         -- 局部变量
print(a, b)		    -- 可以一次打印多个变量 
print(c)		   -- 未声明过的值,都是 nil
----------------------------------------------
a, b = 1, 2		   -- 多变量赋值
a, b, c = 1, 2      -- 值少于变量,此时c未被赋值,即 C = nil
  • number 变量
a = 0x11		   -- 支持 16 进制
b = 2e10		   -- 支持科学计数法	
c = a * b		   -- 支持各种运算符
d = 10^5		   -- 这里表示 10 的 5 次方,不是异或
  • string 类型
a = "abcdadqdwq\nabc"	-- 支持单引号、双引号、转义字符
b = 'awdawdwadwad'
c = [[				   
qwert\nyui
asdfgh
zxcvb
]]					   -- 双中括号内的内容会保持原样的打印,转义字符和注释也会无视
d = a..b			    -- 将 a 和 b 串连接起来(用 .. 连接)
e = tostring(100)        -- 将数字转为字符串
f = tonumber("12")	     -- 将字符串转为数值
g = tonumber("asd")      -- 上述字符串无法转为数字,则 g = nil
print(#a)                -- 通过 '#' 可以获取字符串的长度

s = string.char(0x30, 0x31, 0x32)	-- string.char()方法将参数变为字符
n = string.byte(s, 2)			    -- 取出 s 的第二位,返回的形式是十进制

2. 函数

  • 函数声明
function 函数名(函数参数)     -- 也可以写成: 函数名 = function(函数参数)
   -- body
end						   -- 以end表示函数结束
-----------------------------------------------------------------
-- 例1:
function f(a, b, c)
    print(a, b, c)
end
f(1, 2)					-- 缺少参数c,打印 1 2 nil
-- 例2:
function f(a, b, c)
    return a, b;		-- return 可以返回多个值
end
local i, j = f(1, 2)	
print(f(1, 2))

3. table

  • 数字下标(类似数组)
a = {1, "ac", {}, function() end}	  -- 不同于其他语言,索引从 1 开始,访问不存在索引返回 nil
a[10] = 'a'						    -- 可以直接指定任意索引赋值
table.insert(a, "abc")				 -- 通过table接口加入元素(尾插)
table.insert(a, 1, "acc")			 -- 在指定位置 1 处插入元素,后续元素都会后移
local s = table.remove(a, 2)		  -- 删除(并返回)数组指定的元素
print(#a)						    -- #table名 可获取table的元素数量
  • 字符串下标(类似map)
a = {a = 1, b = "abc", c = function() end, [";;"] = 123}
print(a["a"])				-- 若 a 符合标准命名规范,可以直接 a.a 来调用
print(a[";;"])				-- 输出 123,[";;"]符合标志命名规则
a["x"] = "123123"			 -- 可以直接对一个下标赋值

4. 全局表(_G)

  • 所有的全局变量都存在 _G 表里
a = 1;
print(_G["a"])				-- a 是全局变量,存于_G
print(_G["table"]["insert"])  -- table 和他的方法也存在全局表里

5. bool 型

a = true
b = false					-- lua里,只有 false 和 nil 代表假,其余都是真,0也真
print(1~=2)					-- 注意,lua里判断不等于用 ~= ,其余判断同于c
print(a and b)				-- 与
print(a or b)				-- 或
print(not a)				-- 非
c = 10
print(b > 10 and "yes" or "no")	 -- 条件成立返回and后的值,反之返回or后的值

6. 分支判断

if 条件1 then				-- then  end 表示一个代码块,相当于 c 的 {}
    ...
elseif 条件2 then
    ...
else
    ...
end

7. 循环语句

  • for 循环
for 变量 = 初始值, 终止值, 步长(可选) do
    ...					
end
--------------------------------------------------
for i=10,1,-1 do
    print(i)	
    if i == 5 then
        break
    end
    i = 1			-- for的循环体里无法对循环变量进行修改,此时的i和上方的i是两个变量
end
  • while 循环
while 条件 do
    ...
end
-------------------------------------------------
local n = 10;
while n > 1 do
    if n == 5 then break end
    n = n - 1			-- 注意:lua里不支持 ++ -- 操作
end