Chinaunix首页 | 论坛 | 博客
  • 博客访问: 862300
  • 博文数量: 66
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2071
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-04 15:22
个人简介

从事IT相关工作近10年,获得《网络规划师》《信息系统项目管理师》《系统分析师》、Cisco等认证,对网络和操作系统有较深理解,对认证计费系统和虚拟化技术有深入研究。

文章分类

全部博文(66)

文章存档

2019年(4)

2018年(1)

2015年(2)

2014年(16)

2013年(43)

分类: Python/Ruby

2014-01-02 15:42:40

1、Lua的算术操作符
Lua具有强大的数学计算能力,和其他语言不同的是,Lua支持将 实数 用于驱魔、指数等操作中
x^(0.5)  x^(-1/3)  5%0.2 
上面的运算式都能得到争取的结果,因此是非常方便的

特别要提到的就是对于取模操作的规则:
a%b == a - floor(a/b)*b
也就是计算的结果始终是与第二个数符号相同,特别用法如:
X%1 得到的是 X的小数部分
X-X%1 得到的就是整数部分
X-X%0.01 得到的就是精确到小数点后两位的结果

数学函数比如:
math.abs()
math.pi

2、关系操作符
Lua提供了如下的关系操作符
< > <= >= == ~=
得到的结果不是true就是false
①Lua会根据类型判断,如果类型不同,那么就是不等的
②nil只与自身相等
③==  ~=  是用来比较相等和不等的,特别是 lua中不存在 != 这种不等关系操作符,要注意
④字符串是可以比较大小的,但是是根据字母的顺序
⑤不允许数值和字符串类型比较大小,Lua直接报错,防止用户书写不是想要的效果

3、逻辑操作符
逻辑操作符有 and or not ,和其他语言不同的是返回值问题 
and 运算符来说 如果第一个操作数为假则返回第一个操作数,不然返回第二个操作数
or 第一个操作数为真返回第一个操作数,不然返回第二个操作数
print(4 and 5)  -->5
print(nil and 13) -->nil
Lua 也是短路求值(Short-cut evaluation)的方法,只有需要的时候才会评估第二个操作数
有种写法:
x=x or v 
等价于
if not x then x = v end
上面的写法过于高科技,建议还是老实的书写 if else 的语句进行处理

4、字符串连接
print("Hello" .. " World")
print(0 .. 1)
强调下,Lua中的字符串是不可变的,每次连接也都是创建了一个新的字符串
a = "Hello"
print(a .. " World")
print(a) --> Hello

5、优先级问题
基本一致的优先级,二元运算符只有指数操作符 ^ 和 连接操作符 .. 是“右结合”的,其他的运算符都是“左结合”的。

6、table 构造式(table constructor)
构造式用于创建和初始化table的表达式,这个Lua特有的表达式,也是lua中最有用、最通用的机制之一。
最简单的构造式就是一个空的构造式 {} ,用于创建一个空的 table,当然构造式还可以用于初始化数组
days = {'sunday','monday'}
那么 days[1] 就是 sunday
a = {x=10, y=20}
相当于
a={}; a.x=10; a.y=20;
通用的声明风格:(注意比较 上面的 x=10,y=20 的方式,这里更加通用)
a={['x']=10,['y']=20}

1、关系比较中不等使用 != 进行比较的么?
答:不是滴,不存在这种关系操作符,只有 ~= 用来表示不等于。

2、table索引的下标开始和其他大部分语言一样,都是以0开始的么?
答:不是滴,这个比较特殊,大多数语言下标的确从0开始,但是lua确确实实是从1开始计算的,这个一定要注意和区分。

3、table非要用0开始索引怎么做?
答:手动指定吧, days = { [0]="sunday",monday} ,但是不建议这么做,大多数内置的函数都认为是从1开始的,会导致处理出问题。
阅读(2718) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~