快速掌握Lua 5.3 —— 各种变量和值
来源:互联网 发布:java获取自己程序路径 编辑:程序博客网 时间:2024/04/30 15:07
Q:Lua的基本变量类型?
A:
nil, boolean, number, string, userdata, function, thread, and table.
type()可以获取一个变量的类型,
print(type("Hello world")) --> stringprint(type(10.4*3)) --> numberprint(type(print)) --> functionprint(type(type)) --> functionprint(type(true)) --> booleanprint(type(nil)) --> nilprint(type(type(X))) --> string
Q:Lua中何为真,何为假?
A:false
和nil
被判定为假,其他的值都被判定为真。这里特别要注意,不同于C语言,0
也被判定为真。
Q:Lua中的转义序列?
A:与C中的相同。
\a bell
\b back space
\f form feed
\n newline
\r carriage return
\t horizontal tab
\v vertical tab
\ backslash
\” double quote
\’ single quote
[ left square bracket
] right square bracket
\ddd 使用ASCII码来指定字符
Q:Lua中如何创建字符串?
A:
1、使用""
或''
,
a = "string"b = 'another string'
2、使用[[...]]
,
--[[ 这种方式的优势在于可以将字符串写在多行而无需"\"换行符, 而缺点在于不能内嵌"]]"。同时这其中的转义字符不被解释。]]page = [[abc]]
3、使用..
,可以将两个值连接为一个整体的字符串,
--[[ 注意,使用时".."左边的数字与".."之间必须有空个空格。 否则".."中的第一个"."会被认为是小数点。 规范的写法,".."与两边的数字都用空格分开吧。]]print(10 .. 20)print("Hello" .. "World")
Q:Lua中数字与字符串之间的转换方法?
A:lua支持在运行过程中动态将字符串转换为数字,前提是涉及到了算数运算的操作。
print("10" + 1) --> 11print("hello" + 1) --> ERROR (cannot convert "hello")
lua也支持在运行过程中动态将数字转换为字符串,前提是lua发现此处需要字符串而却给出了数字。
print(10 .. 20) --> 1020print(10 .. "" == "10") --> true
更规范的转换方式为使用tonumber()以及tostring(),
> print(type(tonumber(“10”)))
number
> print(type(tostring(10)))
string
Q:Lua中的table是什么?
A:它有些类似于数组,但它比数组的功能更强大。table中可以存储任何数据,同时可以用数字或者字符串作为key。table的存储空间是动态的,可以任意向其中添加成员。
Q:如何创建以及使用table?
A:
-- 创建一个空的table,并用变量a存储。a = {}-- table中未初始化的成员初始值为"nil"。print(a[1]) --> nil-- 创建table的时候给出初始数据。days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}-- 通过索引使用table。--[[ 注意!table的索引从1开始。虽然你也可以使用索引0存储数据以及使用索引0的数据, 但是Lua使用的库函数都遵循从1开始的规则,所以你最好也是遵守吧。]]print(days[1]) --> "Sunday"-- 创建table时给出索引名以及其对应的初始值。coor = {x = 10, ["y"] = 20, [21] = 300}-- 通过字符串索引使用table。--[[ 注意!此时coor[1]并没有被初始化。 可以不必从索引1开始赋值,同时coor["x"]不是coor[1]。]]print(coor["x"]) --> 10print(coor["y"]) --> 20print(coor[1]) --> nilprint(coor[21]) --> 300-- 创建嵌套table。polyline = {color="blue", thickness=2, npoints=4, {x=0, y=0}, {x=-10, y=0}, {x=-10, y=1}, {x=0, y=1} } -- polyline[1]到polyline[4]分别代表4个嵌套table。print(polyline[2].x) --> -10
Q:a{x},a{“x”},a{[x]},a{[“x”]},a.x,a.”x”,a[x],a[“x”],a.x,a.”x”?
A:
a = {"x" = one} --> ERRORx = 2a = {x = "one", "two", "three"}print(a["x"]) --> oneprint(a[1]) --> twoprint(a[x]) --> threeprint(a.x) --> oneprint(a."x") --> ERRORa = {["x"] = "one", "two", [x] = "three"}-- 与上面的打印结果相同。
总结:
没有a{"x"}
这种用法;
没有a."x"
这种用法; a["x"]
与a.x
相同; a{x}
与a{["x"]}
相同; {"red", "green", "blue"}
与{[1]="red", [2]="green", [3]="blue"}
相同。
Q:如何遍历”table”中每个连续数字索引的元素?
A:
a = {1, 2, x = 7, 3, [9] = 100}--[[ ipairs()返回两个值,table的key和value。 ipairs()不连续的数字索引,比如"[9]", 或是非数字索引的元素,比如"x"。]]for i,val in ipairs(a) do print("[" .. i .. "] = ", val)end--[[ the result.[1] = 1[2] = 2[3] = 3]]-- table.unpack返回table的value。--[[ table.unpack()只能返回table的value。 table.unpack()不连续的数字索引,比如"[9]", 或是非数字索引的元素,比如"x"。]]print(table.unpack(a))--[[ the result.1 2 3]]
Q:如何遍历”table”中所有的元素?
A:
a = {1, 2, x = 7, 3}-- pairs()返回两个值,table的key和value。for i,val in pairs(a) do -- pairs()返回table中所有的key和value。 print("[" .. i .. "] = ", val)end--[[ the result.[1] = 1[2] = 2[3] = 3[x] = 7[9] = 100]]
附加:
1、lua变量中存储的字符串中的任意字符是不能在程序运行过程中改变的。
a = "one string"b = string.gsub(a, "one", "another") -- 将字符串中的one替换为anotherprint(a) --> one stringprint(b) --> another string
2、尽管数字与字符串可以自动转换,但数字和字符串并不是等同的,
print(10 == "10") --> false
3、Lua的package也是使用table来表示。比如io.read()
实际上是调用io表中key为read的函数。
4、当没有变量保存table的引用时,lua会自动释放table所占的内存空间。
5、用table来实现链表,
-- 用table创建链表。list = nilfor line in io.lines() do list = {next=list, value=line}end-- 打印链表。l = listwhile l do print(l.value) l = l.nextend
而这种实现方式在实际使用中几乎不用,链表的更好实现方式是arrays,之后会提。
6、如果你想让”table”从0开始(还是不建议,建议从1开始),很简单:
days = {[0]="Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
7、table初始化数据中最后一个元素后面的逗号是允许的:
a = {[1]="red", [2]="green", [3]="blue",}
8、table初始化数据之间的逗号可以使用分号代替。不过分号通常用来区分不同类型的区域,比如”list part”和”record part”:
{x=10, y=45; "one", "two", "three"}
9、用递归实现table.unpack(),
function unpack(t, i) i = i or 1 if t[i] ~= nil then return t[i], unpack(t, i + 1) endend
- 快速掌握Lua 5.3 —— 各种变量和值
- 快速掌握Lua 5.3 —— 各种运算符以及各种声明
- 快速掌握Lua 5.3 —— "Iterators"和"Generic for"
- 快速掌握Lua 5.3 —— 函数
- 快速掌握Lua 5.3 —— Coroutines
- 快速掌握Lua 5.3 —— 数据结构
- 快速掌握Lua 5.3 —— 环境
- 快速掌握Lua 5.3 —— packages
- 快速掌握Lua 5.3 —— 资源管理
- 快速掌握Lua 5.3 —— 让我们开始吧
- 快速掌握Lua 5.3 —— 编译,运行以及错误
- 快速掌握Lua 5.3 —— 两个完整的例子
- 快速掌握Lua 5.3 —— 数据操作
- 快速掌握Lua 5.3 —— "metatables" and "metamethods" (1)
- 快速掌握Lua 5.3 —— "metatables" and "metamethods" (2)
- 快速掌握Lua 5.3 —— 面向对象编程
- 快速掌握Lua 5.3 —— "table"库
- 快速掌握Lua 5.3 —— 字符串库 (1)
- 初探swift语言的学习笔记九(OC与Swift混编)
- extjs radio样例集合
- AngularJs返回前一页面时刷新一次前面页面
- 智能机市场饱和竞争更为促进技术创新发展
- 关于java Udp收发数据异常的笔记
- 快速掌握Lua 5.3 —— 各种变量和值
- 四元数(Quaternion)和旋转
- MySQL load语句详细介绍
- 测试keytool 生成公钥私钥
- 人力资源招聘的黄金法则
- Linux网络配置
- 黑马程序员——java入门
- 导航条UIBarButtonItem添加图片,如何避免渲染
- NSPointerArray NSHashTable NSMapTable 详解