lua:解释性语言,不需要编译.(底层:C语言代码)
- LuaForWindows:解释器
- sublime/vsCode:文本编辑器
- 1.保存:Ctrl+S 2.运行:Ctrl+Alt+N
注释
- 单行注释:--
- 取消注释:Ctrl+/
- 多行注释:--[[--]]
定义
Lua没有类型定义的语法,每一个值都带有特定的类型。变量没有预定义类型,可以接受任意类型的值
--变量名 = 3
a = 3;--;可省略
a = "123"
八大数据类型:
求类型的函数:type(值/变量名),返回string(类型名)
nil:空类型(只有一个值为nil)
local b = nil
print(type(nil)) --nil
print(type(b)) --nil
print(type(c)) --nil
boolean类型:布尔类型(只有true和false)
只有false和nil为假,其余(包括0和"")都为真.
print(type(true))
number类型:数字类型(包括整数和小数)
--tonumber(字符串,进制):转换为数字 "12"
--向上取整:math.ceil(数字)
--向下取整:math.floor(数字)
--整数与字符串相加(+):将字符串转为整数
print(tonumber("144", 8)) -- 将8进制的144转换为10进制
print(tonumber("144"))
local num = 3.14159
print(math.floor(num)) -- 求num的整数部分
print(num - math.floor(num))-- 求num的小数部分
print(3 / 2) -- 1.5
print("12" + 34) -- 46
string类型:字符串类型
--字符串可以"“界定,也可以用'‘
--字符串是不可修改的
--tostring函数:转换为字符串
--字符串连接:..(注意:左右都是整数时,记得空格)
print("I'm \"ok\"")
print('I\'m "ok"')
local str = "123"
str = "124" -- 重新指向另一个字符串
print(tostring(123)) -- "123"
print("hello".."world")
print(3 .. 4) -- "34"
print(type(3 .. 4)) -- string
function类型:函数类型(作为第一类值)
--定义的语法:
-- function 函数名(行参表)
-- 函数体
-- end
function sum(a,b)
return a + b
end
local sum = function(a,b)
return a+b
end
print(type(sum))
table类型:表类型(数组/数据结构/面向对象都只能通过table实现)
--表的构造式:{}
local tb = {1,2,3,4}
print(type(tb)) -- table
userdata类型:用户数据(C语言与lua交互)
thread类型:线程类型
例题
print(type(type(nil))) -- string
print(type(type)) -- function
print(type(12 + "34")) -- number
print(12 .. "34" + 5) -- 1239
运算符
算术运算符:+ - * / % ^(指数)
print(3 / 2) -- 1.5
print(3.0 / 2) -- 1.5
local pi = 3.1415926
print(pi % 0.1) -- 0.0415926
-- 求pi的小数部分
print("pi的小数部分是" .. pi % 1.0)
-- 求pi精确到n位小数点
local n = 3
print("pi精确到" .. n .. "位小数点后是" .. pi - pi % (10 ^ -n))
print(2 ^ 3) --8
print(8 ^ (1/3)) --2.0
print(8 ^ (-1/3)) --0.5
关系运算符: > < >= <= == ~=(不等于)
字符串连接符: ..
- 求字符串和表的长度:#
local tb = {1, 2, 3, 4, 5}
print("tb的长度为" .. #tb)
local str = "abcd"
print("str的长度为" .. #str)
转义字符:\字符 \十进制(-128 - 127)
str = "ab\n \12bb"
print("str的长度为" .. #str)
print(str)
逻辑运算符:
- 逻辑与:a and b(如果a为真,结果为b;如果a为假,结果就为a)
- 逻辑或:a or b(如果a为真,结果为a;如果a为假,结果就为b)
- 逻辑非:not a(a为真,not a为假,a为假, not a为真)
print(0 and nil) --nil
print(not nil) --true
print(not 0 and false) -- false
print(0 or nil and false) -- 0 -- and > or
print(-1 and 0) -- 0
-- 实现a?b:c a and b or c(b不能为假)
local ans = (nil and 2 or 3)
print(ans)
赋值运算符:=
- 多重赋值:先计算右边表达式的值,再一一赋值给左边
local a,b,c = 1,2
print(a,b,c) -- 1, 2, nil
-- a = a + 1
-- 交换a和b的值
a,b = b,a
print(a,b)