lua 运算符相关问题

1. lua 运算符


  • lua支持的运算符有 + - * / % ^(加、减/负、乘、除、取余、幂指)
  • 尤其要说的是幂指运算,这是大多数语言都不支持的,幂指运算不仅仅可以正指数,还可以负指数,贼牛逼
print(2^10, 3^10, 4^0.5, -3^18, 4^-3, 6^-0.3)
>>>
1024.0	 	59049.0	2.0		-387420489.0		0.015625		0.58419068106787
  • 除了幂运算外,取余运算也是我们需要注意的,在Lua中(其实大部分语言都这样处理),取余运算被等价于
a % b == a - math.floor(a/b)*b
  • 这里需要注意小数点精度的问题,可能有问题,也可能没有

  • lua 的比较运算符有
==
>=
<=
~=
>
<
  • 特别要注意的 lua运算符只能比较同数据类型的变量 数据类型不一样的变量之间比较 一律返回false
local a= 10
local b = "10"
print(a == b)
print(a == b + 0)
>>>
false
true
  • 在上面代码中很容易看出来 作为数字的 a 和 作为字符串的 b ,进行比较时,即使二者的数值相等,返回的也是false值。但是将 b 转换为数值类型再比较就可以判断出二者等值 返回true

  • 此处特别要注意的是对象类型的比较 只有对象二者是同一个对象时才会判断二者相等,否则二者不相等
  • 原因是对象类型的等值判断 是 判断二者的引用?(原文说的是“reference”),lua每次创建新的对象都和之前的对象不一样,即使内容一样,创建出的两个对象也是不同的。
  • 深究原因 应该是设置内存指针相关,具体原因日后细想吧
  • 而且貌似比较运算符还有原方法(元操作符)

2.区块运算的方法

  • 在C++之类的语言中 想在某一范围内只做一件事 并且做完把这块内存释放掉可以使用{}来包裹代码块,来提高安全性
  • 同样的lua中也提供这种操作 那便是do end 操作
do
  local a = 10
  print(a)
end
print(a)
>>>
10
nil
  • 也可以通过实验很轻松的看出来 变量a的内存在end后就被释放掉 这样可以很好的解决作用域问题

  • 了解了上述的问题 我们可以更直观的知道lua是怎样构造对象的(结构体?)
local a = {10 == 10, "10" == 10}
print(a.temp)
for _, i in pairs(a) do
 print(i)
end

local value
do
  local t = {}
  t[1] = 1
  t[2] = 2
  t.temp = "dfsgf"
  value = t
end
for _, i in pairs(value) do
  print(i)
end

>>>
nil
true
false
1
2
dfsgf
  • lua对于userdata的构建相当于上述代码 在一块区域构建好userdata相关的内存后,用指针指向这块内存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值