Lua_数据类型

Posted 夜尽天已明

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua_数据类型相关的知识,希望对你有一定的参考价值。

-- 数据类型
--[[
nil 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean 包含两个值:false和true。
number  表示双精度类型的实浮点数
string  字符串由一对双引号或单引号来表示
function    由 C 或 Lua 编写的函数
userdata    表示任意存储在变量中的C数据结构
thread  表示执行的独立线路,用于执行协同程序
table   Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。
--]]
print(type("hello world"))
print(type(10.4*3))
print(type(print))
print(type(type))
print(type(true))
print(type(nil))
print(type(type(x)))

-- nil 空
tab1 = {key1 = "var1",key2 = "var2","var3"}
for k,v in pairs(tab1) do 
    print(k .. "-" .. v)
end

tab1.key1 = nil
for k,v in pairs(tab1) do
    print(k .. "-" .. v)
end
--[[
pairs 和 ipairs区别

pairs: 迭代 table,可以遍历表中所有的 key 可以返回 nil
ipairs: 迭代数组,不能返回 nil,如果遇到 nil 则退出
--]]
-- boolean 布尔
print(type(true))
print(type(false))
print(type(nil))
if false or nil then
    print("至少有一个是true")
else
    print("false 和 nil 都为false")
end

-- number 数字
print(type(2))
print(type(2.2))
print(type(0.2))
print(type(2e+1))
print(type(2e-1))
print(type(7.82633256e-06))

-- string 字符串
string1 = "this is string1"
string2 = "this is string2"

html = [[
    <html>
    <head></head>
]]

print(string1)
print(string2)
print(html)

print("2" + "6")
print("2" + 6)
print("2 + 6")
print("-2e2" * "6")
print("error" .. 1)
print("a" .. "b")

-- #来计算字符串的长度,放到字符串的前面
len = "www.lstudy.top"
print(#len)
print(#"www.baidu.com")

-- table 表
-- 创建一个空表
local tbl1 = {}

-- 直接初始化表
local tbl2 = {"apple","pear","orange","grape"}

-- 不同于其他语言的数组把 0 作为数组的初始索引,在 Lua 里表的默认初始索引一般以 1 开始。
a = {}
a["key"] = "value"
key = 10
a[key] = 22
a[key] = a[key] + 11
for k,v in pairs(a) do
    print(k .. ":" .. v)
end

local tbl = {"apple","pear","orange","grape"}
for key,val in pairs(tbl) do
    print("key",key,"val",val)
end

-- table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil
a3 = {}
for i = 1,10 do
    a3[i] = i
end
a3["key"] = "value"
print(a3["key"])
print(a3["none"])

-- function 函数

function factorial1(n)
    if n == 0 then
        return 1
    else
        return n * factorial1(n - 1)
    end
end
print(factorial1(5))
factorial2 = factorial1
print(factorial2(5))

-- function 可以以匿名函数(anonymous function)的方式通过参数传递

function testFun(tab,fun)
    for k,v in pairs(tab) do
        print(fun(k,v));
    end
end

tab = {key1 = "val1",key2 = "val2"};
testFun(tab,
function(key,val) --匿名函数
    return key .. "=" .. val;
end
);

--[[
thread 线程
在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,
可以跟其他协同程序共享全局变量和其他大部分东西。
线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停
--]]

--[[
userdata 自定义类型
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数
据(通常是 struct 和 指针)存储到 Lua 变量中调用。
--]]

以上是关于Lua_数据类型的主要内容,如果未能解决你的问题,请参考以下文章

03 Lua 数据类型

Lua_变量

03 Lua 数据类型

03 Lua 数据类型

XLua系列讲解_使用VsCode来书写Lua代码

XLua系列讲解_使用VsCode来书写Lua代码