Note:Programming in Lua - Chapter 3 : Experience

       区别,表达式中可包含函数定义和table构造式。

       算术操作符

       区别,提供^操作符作为指数操作符,x^2表示x的平方。

       lua中的%,如有 a%b,得到的结果的符号总是与b相同。如-3%2得1。

       关系操作符

       区别:~= 是 != 。关于==与~=,类型不同直接不同,类型相同再基于类型比较,nil只与nil相同。

       对于userdata,table,function,存储它们的变量是作为引用比较的:

       a= {}; a.x = 1;

       b= {}; b.x = 1;

       c= a;

上述a/b/c,只有a == c,而a ~= b,

       只能对两个number/string作大小比较,string大小比较根据区域设置来进行。其它类型只能进行相等性或不等性比较。

       逻辑操作符and or not ,对于and,如果操作数1为假,就返回第1个操作数,不然返回第2个操作数,对于or来说,如果它的第一个操作数为真,就返回第一个操作数,否则返回第2个操作数。and和or都是短路求值。

       not只返回true 或 false

       字符串连接符,之前讲过 “..”注意是两个点,且lua不能改变字符串,所以该操作符返回一个新的字符串。

       优先级——老话,乘除大于加减,其它加上括号。要知道就算你分得清,其他人可能分不清。

       table构造器,常用方法有两种:

       列表初始化方法:a = {"one","two"}   -->相当于a[1] = "one" ;a[2] ="two"

       a= {hello = "world"} -->相当于 a["hello"]= "world"

       每当遇到构造式,lua都会建立一个新的table,然后执行构造式,因此,lua可以很简单地创建链表:

       list= nil

       forline in io.lines() do

              list= {next = list , value = line}    -->创建一个新的链表,执行构造式,再把

       -->新链表赋给list,注意这是按返方向构造链表

       end

       我们可以把两种初始化风格混合在一起使用:

       polyline= {color = "blue",thickness = 2,npoints = 4,

                      {x = 0, y = 0},

                      {x = -10 ,y = 0}}

       另有一种更强大的构造式:

       opnames= { ["+"] = "add" , ["-"] = "sub"}

       这种方法甚至可以把运算符及负数作为索引。

       构造式中可以用分号来代替逗号。

猜你喜欢

转载自blog.csdn.net/fq_sl/article/details/81042405