lua学习笔记---1.数据类型与运算符

284 阅读3分钟

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)