Lua基本数据类型

简介: Lua基本数据类型

Lua官网文档入口

http://www.lua.org/

document --> manual

一、基本数据类型

lua 中有八种基本数据型,分别是:

nil,boolean,number,string,function,userdata,thread 和 table。注意:lua 语句结束的分号可加可不加。

Lua 库函数 type返回一个描述给定类型数据的字符串,用法 type(val)

1.1 nil 表示空
--nil类型
a = nil;
print(type(a))
1.2 boolean
--boolean类型
print(type(true))
print(type(false))
1.3 number 只包括整型和浮点型
--number类型
print(type(100))
print(type(3.1415926))
1.4 string 单引号和双引号都表示string 注意:单个字符也是字符串

与C语言一样,可以用反斜杠 \ 对特殊字符进行转义 如:换行符:\n 制表符:\t

如果想原样输出字符串,使用[[]]:

--string类型
str1 = 'hello'
str2 = "world"
str3 = 'A'
print(type(str1))
print(type(str2))
print(type(str3))
str4 = "a\nb\tcde"
print(str4)
str5 = [[a\nb\tcde]]
print(str5)

其余基本数据类型,我们在后面的文章再详细展开,这里可以先看下相关类型的打印。

--[[
    3. userdata 自定义数据类型
    4. thread 协程
    5. table 表
    在 lua 中只有false 和 nil 才表示假, 0 和 空串表示真!
]]
--function 类型
print(type(type))  
--table 类型
print(type({}))  
val1 = 0;
if val1 then
    print("val1 = 0 is true");
else
    print("val1 = 0 is false");
end
val2 = "";
if val2 then
    print("val2 is true");
else
    print("val2 is false");
end

运行结果:

1.5 function

function 在lua中是一个基本数据类型,是第一类值。格式如下:

function funcName(args...)
  ...
end

function的参数和返回值很灵活。

代码示例:

function func1()
    print("func1 call")
end
func1()
function func2(a, b, c)
    print(a, b, c)
end
func2("lwang", 25, "beijing")
-- 可变参函数
function func3(...)
end
-- 将匿名函数赋值给变量
add = function(a, b)
    return a+b
end
print(add(10, 20)) 
--作为其他函数的参数
function func4(funcName, a, b)
    return funcName(a,b)
end
local res = func4(add, 11, 22)
print(res)

运行结果:

1.6 table

function 在lua中是一个基本数据类型,是第一类值。格式如下:

# 第一种,类似于map
tableName={
    k=v,
}
# 第二种,类似于数组,下标从1开始
tableName = {v1, v2, v3, ....}

代码示例:

-- table 类型,类似于map,理论上处理nil都可以成为key 
stuInfo = {
    id = 1,
    name = "zhangsan",
    age = 18,
    sex = true
};
-- 遍历table中的元素
for k, v in pairs(stuInfo) do
    print(k,v)
end
print("==============")
-- 只打印value
for _, v in pairs(stuInfo) do
    print(v)
end
-- 添加元素
stuInfo.country = "China"
stuInfo["habbie"] = "basketball"
print(stuInfo.country)
print(stuInfo.habbie)
-- 删除元素,让索引对应的value指向nil即可
stuInfo.age = nil
print(stuInfo.age)
print("======== Array test ========")
nums = {1, 3, 5, 7, "lwang", "panda", true}
-- for k, v in pairs(nums) do
--     print(k, v)
-- end
-- 增加元素
nums[10] = 10
nums[100] = 100
for k, v in pairs(nums) do
    print(k, v)
end
-- 修改指定下标的元素值
nums[1] = "darren"
for k, v in pairs(nums) do
    print(k, v)
end

table也能混合kv键值对和数组元素

-- 混合 tabele
mix = {
    name = "panda",
    age = 25,
    1, 3, 5, 7, 
    {"hello", "world", false, 3.14}
};
for k, v in pairs(mix) do
    if (type(v) == "table") then
        for k2, v2 in pairs(v) do
            print("    ", k2, v2)
        end
    else
        print(k, v)
    end
end

table中的function

function show_func(a, b)
    print(a, b)
end
-- 表中的元素需要用,隔开
tb = {
    show = show_func,
    add = function (a, b)
        return a+b;
    end,
    sub = function (a, b)
        return a-b;
    end,
    display = function(a)
        print(a)
    end
}
tb.show(100, 200)
tb["show"](1, 2)
-- 添加方法
tb.mul_func = function(a, b)
    return a*b;
end
print(tb.mul_func(2, 2))
print(tb["mul_func"](3, 3))
tb.display("hello,world")

运行结果

使用table模拟计算器类,实现加减乘除

-- 模拟计算器类
calculator = {
    add = function ()
        calculator.result = calculator.val1 + calculator.val2;
    end,
    sub = function ()
        calculator.result = calculator.val1 - calculator.val2;
    end,
    mult = function ()
        calculator.result = calculator.val1 * calculator.val2;
    end,
    div = function ()
        calculator.result = calculator.val1 / calculator.val2;
    end,
    show = function()
        print(calculator.result)
    end,
    val1 = 0,
    val2 = 0,
    result = 0
}
calculator.val1 = 100
calculator.val2 = 200
calculator.add()
calculator.show()
calculator.sub()
calculator.show()
calculator.mult()
calculator.show()
calculator.div()
calculator.show()

运行结果:


推荐一个零声学院免费教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,点击立即学习:

相关文章
|
存储 Java C语言
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
95 0
|
XML 存储 Java
【Lua基础 第1章】初识Lua脚本语言、数据类型、全局变量、关键字的使用
初识Lua脚本语言、数据类型、全局变量、关键字的使用
157 0
【Lua基础 第1章】初识Lua脚本语言、数据类型、全局变量、关键字的使用
|
数据采集 存储 大数据
Lua 语法数据类型与变量|学习笔记
快速学习 Lua 语法数据类型与变量
|
存储
03 Lua 数据类型
Lua 体积小、启动速度快,一个完整的 Lua 解释器不过200k,在所有脚本引擎中,Lua 的速度可以说是最快的。所以 Lua 是作为嵌入式脚本的最佳选择。
03 Lua 数据类型
|
6月前
|
存储 NoSQL Redis
Redis的Lua脚本有什么作用?
Redis Lua脚本用于减少网络开销、实现原子操作及扩展指令集。它能合并操作降低网络延迟,保证原子性,替代不支持回滚的事务。通过脚本,代码复用率提高,且可自定义指令,如实现分布式锁,增强Redis功能和灵活性。
249 1
|
1月前
|
缓存 分布式计算 NoSQL
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
29 2
|
5月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
227 0
|
2月前
|
存储 JSON Ubuntu
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
|
3月前
|
存储 NoSQL Redis
Tair的发展问题之在Redis集群模式下,Lua脚本操作key面临什么问题,如何解决
Tair的发展问题之在Redis集群模式下,Lua脚本操作key面临什么问题,如何解决