Lua学习之表达式
2015-09-19 10:25
316 查看
坚持 成长 每日一篇
一元运算:-(负值)
如果两个值类型不同返回结果都是false。nil只能和自己相等。Lua通过引用比较tables,userdata,functions。也就是当且仅当两个表示同一个对象时候相等。类似OC的比较。
为了避免不一致的结果,混合比较数字和字符串大小,Lua会
and 和 or 的运算结果不是 true 和 false,而是和它的两个操作数相关。
C 语言中的三元运算符
在 Lua 中可以这样实现:
not 的结果只返回 false 或者 true
字符串连接,如果操作数为数字,Lua 将数字转成字符串。
除了^和..外所有的二元运算符都是左连接的。
造函数是{},用来创建一个空表。
表的索引是从1开始所以days[1]是Sunday
我们可以初始化表为一个Record来使用
这里的x和y我们可以叫它为域。
注意:以Record方式的表我们要用访问字符串索引的是访问域里面的值。
每次调用{}构造函数,lua都会创建一个心的table。
在同一个构造函数中可以混合列表风格和 record 风格进行初始化,如:
使用字符串索引初始化必须使用[]来包含字符串如:
我们也可以用[]来初始化数字索引表。这样我们可以以某个索引开始初始化表如:
注意:如果是数字索引的时候不能使用负索引初始化一个表中元素,但是我们可以从0开始,不推荐数组下标从 0 开始,否则很多标准库不能使用(新版Lua支持从负数开始初始化表)。
在构造函数中域分隔符逗号(“,”)可以用分号(“;”)替代,通常我们使用分号用来 分割不同类型的表元素。
算术运算符
二元运算符:+-*/^(加减乘除幂)一元运算:-(负值)
关系运算符
< > <= >= == ~=
如果两个值类型不同返回结果都是false。nil只能和自己相等。Lua通过引用比较tables,userdata,functions。也就是当且仅当两个表示同一个对象时候相等。类似OC的比较。
"0" == 0 -- false 2 < 15 -- true "2" < "15" -- false (alphabetical order!)
为了避免不一致的结果,混合比较数字和字符串大小,Lua会
逻辑运符
and or not
and 和 or 的运算结果不是 true 和 false,而是和它的两个操作数相关。
a and b -- 如果 a 为 false,则返回 a,否则返回 b a or b -- 如果a为true,则返回a,否则返回b
C 语言中的三元运算符
a?b:c
在 Lua 中可以这样实现:
(a and b) or c
not 的结果只返回 false 或者 true
print(not nil)--> true print(not false)--> true print(not 0)--> false print(not not nil)--> false
连接运算符
.. --两个点
字符串连接,如果操作数为数字,Lua 将数字转成字符串。
优先级
从高到低的顺序: ^(幂) not - (unary) * / + - .. < > <= >= ~= == and or
除了^和..外所有的二元运算符都是左连接的。
表的构造
构造器是创建和初始化表的表达式。表是 Lua 特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。
days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
表的索引是从1开始所以days[1]是Sunday
我们可以初始化表为一个Record来使用
a = {x=0, y=0} <--> a = {}; a.x=0; a.y=0//先建空表,再添加域。
这里的x和y我们可以叫它为域。
注意:以Record方式的表我们要用访问字符串索引的是访问域里面的值。
每次调用{}构造函数,lua都会创建一个心的table。
在同一个构造函数中可以混合列表风格和 record 风格进行初始化,如:
polyline = {color="blue", thickness=2, npoints=4, {x=0, y=0},--这里是polyline[1] {x=-10, y=0}, --这里是polyline[2] {x=-10, y=1}, --这里是polyline[3] {x=0, y=1}--这里是polyline[4] }
使用字符串索引初始化必须使用[]来包含字符串如:
a = {["mm"]=100} a['mm']--> 100
我们也可以用[]来初始化数字索引表。这样我们可以以某个索引开始初始化表如:
{"red", "green", "blue"} <--> {[1]="red", [2]="green", [3]="blue"}
注意:如果是数字索引的时候不能使用负索引初始化一个表中元素,但是我们可以从0开始,不推荐数组下标从 0 开始,否则很多标准库不能使用(新版Lua支持从负数开始初始化表)。
在构造函数中域分隔符逗号(“,”)可以用分号(“;”)替代,通常我们使用分号用来 分割不同类型的表元素。
{x=10, y=45; "one", "two", "three"}
相关文章推荐
- lua中读取时间
- 学习ULua之委托
- protobuf 在lua中的使用
- Lua 学习之 coroutine as iterators
- 对lua #(取长度)操作符的理解
- 纯lua实现Base64加密与解密
- Lua 学习笔记(二)
- Lua学习之类型,值
- Lua学习之Chunks ,全局变量,命令行方式
- lua中数值for循环的理解
- lua支持中文--改法修正
- luaj/luaoc
- Lua基础
- Lua学习之Mac下搭建lua环境
- 无法加载 DLL“lua52”: 找不到指定的模块
- lua基础(1)
- 我的openwrt学习笔记(三十五):Openwrt 之luci-lua调用uci的测试
- 我的openwrt学习笔记(三十三):Openwrt 之lua 在ubuntu中的测试
- Lua的数组(key为1234的表)
- Lua的表(字典)