lua pcall 返回值_Lua语言:基础知识

概述

如果要更全面的学习Lua语言,可以查阅下面文档:

  • Lua程序设计(PIL):lua作者写的一本书,是学习lua的不二之选。
  • Lua参考手册5.3版:lua的使用手册。

基础数据类型

lua一共有8种基本的数据类型:nil, string, number, boolean, table, function, thread, userdata

其中nil表示没有值,和其他类型都不相等,在条件判断中只有nil和false表示否定。

string是字符串类型,它本质上是一个字节序列,也就是它说可以存储任意数据,5.3以后增加了utf8的函数库,使用它可以对utf8字符串作正确的处理。

number代表数值类型,在5.3以前是没有整型的,5.3以后加上了整型作为number的子类型,使用math.type判断一个数值是整型还是浮点数。

boolean代表布尔值,很早期的lua版本中并没有boolean类型,boolean类型的出现,大概是为了解决table中空值的问题。

table是唯一的数据结构

table是lua唯一的数据结构,其他结构都可以用table实现,它不仅可以用数值作索引,也可以用其他类型(比如字符串,函数,甚至另一个table),lua内部用一个数组和一个哈希表来实现table。这使得table非常强大,即可以用作字典,也可以用作数组,配合元表机制还可以模拟面向对象。lua的很多基础设施,比如模块,全局变量,元表,都是基于table实现的。在语言层面它是如此简洁,可又能实现无比强大的功能。

table的简单声明:

-- 当成字典使用
local t = {
    
    a = 1,
    b = true,
    c = "haha",
}
-- 当成数组使用
local t2 = {
    1, "aa", false}

table甚至可以同时表示字典和数组:

local t3 = {
    
    1, 2, 3,
    a = "aaa",
    b = "bbb",
}

实际上他们可以使用通用的格式来表示 :

local t3 = {
    
    [1] = 1, 
    [2] = 2, 
    [3] = 3,
    ["a"] = "aaa",
    ["b"] = "bbb",
}

但在实践中,我们最好不混用字典和数组,这常常会引发混乱的问题。而从设计的角度看,我认为它违反了单一职责原则。比如空Table就且有二义性,如果我们有一个需求,要将空Table转换成JSON格式,此时JSON库就不知道如何处理了,因为它不知道要转成空数组还是空对象,cjson默认

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值