一、Lua中的类型与值
来源:互联网 发布:深圳爱玩网络 编辑:程序博客网 时间:2024/05/01 15:36
Lua中的类型与值|果冻想
本文是对于“果冻想”的《Lua入门系列》所作笔记,原文来自上面链接。
基础介绍
Lua是一种动态类型的语言。在语言中没有类型定义的语法,每个值都带有其自身的类型信息。在Lua中有8种基本类型,分别是:
1. nil
2. boolean
3. number
4. string
5. userdata (自定义类型)
6. function (函数类型)
7. thread (线程)类型
8. table (表)类型
我们可以使用type函数,判断一个值的类型,type函数返回一个对应类型的字符串描述。例如:
local nilValue = nil
local bValue = true
local nValue = 1
local strValue = "1"
local tbValue = {}
print(type(nilValue))-- nil
--省略
nil
nil是一种类型,它只有一个值nil。一个变量在第一次赋值前的默认值就是nil。
boolean
boolean类型有两个可选择:false和true。在lua中只有false和nil是“假”的,除此之外都“真”。
string
Lua字符串是不可变的值。当字符串多行存在是,可以使用“[[]]”符号来界定一个多行字符串,同时,Lua不会解析其中的转义序列。例如:
local page = [[
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>xxxx</title>
</head>
<body>
</body>
</html>
]]
print(page)
table
在Lua中,table既不是“值”,也不是“变量”,而是对象。可以将table想象成一种动态分配的对象,程序中仅仅有一个对它们的引用(指针)。
local a = {} -- 创建一个table,并将它的引用存储在a
a.x = 10
local b = a -- b与a引用同一个table
print(b.x)--10
b.x = 20
print(a.x)--20
b = nil -- 现在只有a还在引用table
-- 错误:print(b["x"])
print(a.x)--20
a = nil -- 现在不存在对table的引用
当对一个table的引用个数为0时,Lua的垃圾收集器最终会删除该table,并释放它所占用的内存空间。
在Lua 5.1中,长度操作符“#”用于返回一个数组或线性表的最后一个索引值。
local a = {}
a[1000] = 1
print(#a)-- 0
在Lua中,对于所有未初始化的元素的索引结果都是nil。Lua将nil作为界定数组结尾的标志。当一个数组有“空隙”时,即中间含有nil时,长度操作符会认为这些nil元素就是结尾标记。因为a[1] = nil,所以,对于上述代码的输出应该是0。所以,在处理table的时候,需要考虑这个问题。那么对于含有nil的table,如何获取它的长度呢?我们可以使用table.maxn,它将返回一个table的最大正索引数,如下所示:
local a = {}
a[1000] = 1
print(table.maxn(a)) -->1000
function
在Lua中,函数被当做值来对待,这表示函数可以存储在变量中,可以通过参数传递给其它函数,还可以作为其它函数的返回值。Lua既可以调用自身Lua语言编写的函数,又可以调用以C语言编写的函数。Lua所有的标准库都是用C语言写的。
userdata和thread
userdata用于表示一种由应用程序或C语言库所创建的新类型。由于userdata类型可以将任意的C语言数据存储到Lua变量中。在Lua中,这种类型没有太多的预定义操作,只能进行赋值和相等性测试。
thread主要用于“协同程序”。
0 0
- 一、Lua中的类型与值
- Lua 类型与值
- Lua类型与值
- lua类型与值
- Lua程序设计笔记一: 基础用法/类型与值
- lua--lua中的类型和值
- Lua的类型与值
- Lua的值与类型
- Lua基础 类型和值(一)
- Lua基础(一):类型和值
- lua中的基本类型
- lua中的基本类型
- [Lua]Lua语言基础汇总(1) -- 类型与值
- Lua 类型与值(二)
- lua学习之类型与值
- 3.lua学习笔记:类型与值
- Lua入门教程 2.类型与值
- Lua学习总结(值与类型)
- IPC主题一之消息队列
- 双向数据绑定-表单
- Java中覆盖、继承、重载和多态的详细解说与this和super的用法
- Linux内存模型
- C#正则表达式小结
- 一、Lua中的类型与值
- Scikit-learn 安装
- JS为循环动态生成的节点添加点击事件
- 安卓智慧上海学习笔记系列——禁用ViewPager滑动事件
- Oracle START WITH ... CONNECT BY PRIOR 带条件会有重复
- 背包九讲之多重背包问题
- Leetcode 24 Swap Nodes in Pairs
- 仿微信-界面动画(9)--ListView有不同类别Item
- Github上传项目步骤和常见问题