频道栏目
首页 > 程序开发 > 软件开发 > C++ > 正文
Lua表达式
2017-06-19 09:35:44      个评论    来源:  
收藏   我要投稿

Lua表达式


1:算式操作符

算式操作符 说明
+ 加法
- 减法
* 乘法
/ 除法
^ 指数
% 取模
print(1 + 1)       -->output 2
print(5 / 10)      -->output 0.5。 这是Lua不同于c语言的
print(5.0 / 10)    -->output 0.5。 浮点数相除的结果是浮点数
-- print(10 / 0)   -->注意除数不能为0,计算的结果会出错
print(2 ^ 10)      -->output 1024。 求2的10次方

local num = 1357
print(num % 2)       -->output 1
print((num % 2) == 1) -->output true。 判断num是否为奇数
print((num % 5) == 0)  -->output false。判断num是否能被5整数

2:关系操作符

关系操作符 说明
< 小于
> 大于
<= 小于等于
=
大于等于
== 等于
~= 不等于
2.1:返回结果

所有的这些操作符的运算结果都是true或false

2.2:== 和 ~=

==用于相等性测试,操作符~=用于不等性测试。

这2个操作符可以用于任意2个值。

如果2个比较的值是不用的类型,lua就认为他们是不相等的。

    print("a" == 3)     --> output  false

如果2个比较的值是同一种类型的,则根据类的大小规则的比较。

    print(1 == 2)       --> output  false
    print("a" == "a")   --> output   true

注意nil只与其之身相等

    print(nil == nil)      --> output  true
    print(nil == "false")  --> output  false
2.3:复杂的数据类型table,usedata的比较

对于table,usedata和函数(function),lua是做引用的比较,也就是说,只有他们的引用是同一个对象的时候,才认为他们是相等的。

    a = {}
    a.x = 1
    a.y = 0
    b = {}
    b.x = 1
    b.y = 0
    c = a
    print(c == a)      -->output true
    print(c == b)      -->output false
    print(c ~= b)      -->output true

3:逻辑操作符

逻辑操作符 说明
and 逻辑与
or 逻辑或
not 逻辑非

Lua 中的 and 和 or 是不同于 c 语言的。在 c 语言中,and 和 or 只得到两个值 1 和 0,其中 1 表示真,0 表示假。而 Lua 中 and 的执行过程是这样的:

与控制语句一样,所有的逻辑的操作符将false和nil视为假,而将讲其他的任何视为真

a and b 如果 a 为 nil或false,则返回 a,否则返回 b
(如果它的第一个操作数为假,就返回第一个操作数;否则返回第二个操作数)

a or b 如果 a 为 nil,则返回 b,否则返回 a(如果它的第一个操作数为真了,就返回第一个操作数了,否则返回第二个操作数)

print(4 and 5)        -->output 5

print(nil and 13)     -->output nil

print(false and 13)   -->output false

print(4 or 5)         -->output 4

print(false or 5)     -->output 5

4:字符串连接

4.1:

要在lua连接2个字符串,可以使用操作符 “..” (2个点)。如果其任意一个操作符是数字的话,lua会将这个数字转换为一个字符串

print("hello " .. "world")     -->output  hello world

print(0 .. 1)                  -->output  01
4.2:

lua中的字符串是不可变的值(immutable value)。连接操作符只会创建一个新的字符串,而不会对原操作数进行任何修改。

a = "hello"

print(a .. " world")           -->output hello world 

print(a)                       -->output hello
4.3:

由于 Lua 字符串本质上是只读的,因此字符串连接运算符几乎总会创建一个新的(更大的)字符串。这意味着如果有很多这样的连接操作(比如在循环中使用 .. 来拼接最终结果),则性能损耗会非常大。在这种情况下,推荐使用 table 和 table.concat() 来进行很多字符串的拼接,例如:

local pieces = {}
for i, elem in ipairs(my_list) do
    pieces[i] = my_process(elem)
end
local res = table.concat(pieces)

5:优先级

优先级
^
not # -
/ %
-
..
< > <= >= ~= ==
and
or
a + i < b/2 + 1       <-->   (a+i) < ((b/2) + 1)

5+x^2*8               <-->   5+ ((x^2)*8)

a   (a   -(x^2)

x^y^z                 <-->   x^(y^z)
在二元操作符中,除了指数操作符”^” 和连接操作符 “..” 是”右结合”的,其他的都是”左结合”

6:table构造式(table constructor)

table的构造式有3种方式。

(1)空构造方式,用于创建一个空的table,构造式还可以用于初始化数组。

days = {
"sunday","moday","tuesday","wednesday",
"thursday","friday","saturday"
}

print(days[1])       -->output  sunday

(2)lua还提供了一种特殊的语法用于初始化记录风格的table

a = {x = 10,y = 20}  

-- 等效下面的代码

a = {} 
a.x = 10
a.y = 20

(3)在一个构造式中还可以用分号代替逗号。通常会将分号用于分隔构造式中不同的成分。例如将列表部分与记录部分明显的区分开来:

{x=10 ,y =45 ; "one" , "two" , "three"} 

7:三目运算符实现

lua中 三目运算符的实现

a ? b : c
(a and b) or c

a为true 则 (a and b) <==> b

a为false 或 nil时 (a and b) <==> a

又 a or c <==> a

所以

(a and b) or c <==> a ? b : c
点击复制链接 与好友分享!回本站首页
上一篇:ACM程序设计节课总结
下一篇:如何通过CDR利用路径属性功能让图形沿路径均匀分布
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 |

版权所有: 88bifa.com--致力于做实用的IT技术学习网站