Lua 5.3中的新功能

並未涵蓋所有Lua 5.3的所有新功能。
Lua 5.3 主要特性如下:
“number”類型包含兩種內部類型,即“integer”與“float”,因为 Lua 的意识形态没有改变,它仍然试图保护用户免受数字类型的干扰。内部类型称为子类型,如何获取包含数字的变量的子类型?
對於本机位运算符的支持。警告,在默认安装中它们是 64 位的,很少支持 UTF-8
Lua 5.3 安装提供了“integer”和“float”大小的特定配置:
64-bit integer and 64-bit double (叫做 “Standart Lua”, 默認)
– #define LUA_INT_LONGLONG, #define LUA_REAL_DOUBLE
32-bit integer and 32-bit float (叫做 “Small Lua”)
– #define LUA_INT_INT, #define LUA_REAL_FLOAT
很少混合使用。
可以在 luaconf.h 中进行配置,只需找到“#define LUA_INT_LONGLONG”、“#define LUA_REAL_DOUBLE”行并将它们更改为你需要的。
有点奇怪的是,有定义“integer”类型的 LUA_INTEGER 宏定义,并且没有应该用来定义“float”类型的 LUA_FLOAT 宏定义,作者决定使用旧的 LUA_NUMBER 宏定义,希望这会不会造成混乱和bug。
通過擼代碼來學習這些變化,大部分代码基于 Lua 5.3 测试套件。

local debug = require("debug")
print(debug.Csize('I') .. "-bit integers") -- 64-bit integers
print(debug.Csize('F') .. "-bit floats") -- 64-bit floats
local numInteger = 2
print(type(numInteger)) -- "number"
print(math.type(numInteger)) -- "integer"
local numFloat = 2.0
print(type(numFloat)) -- "number"
print(math.type(numFloat)) -- "float"
-- for non-numeric types it just returns "nil"
print(math.type("")) -- "nil"
print(math.type("10")) -- "nil"
print(math.type({
   })) -- "nil"
print(math.type(nil)) -- "nil"

有一个有趣的整数与字符串运算(更类似于 JavaScript)和新的整数除法运算符:

assert(10/20 == 0.5)
assert(10-20 == -10)
assert(10*-20 == -200)
assert(10^3 == 1000)
assert(10/"20" == 0.5)
assert("10"-"20" == -10)
assert("10"*"-20" == -200)
assert("10"^"3" == 1000)
assert(2/0 == 10.0/0)
assert(10 // 3 == 3) -- this operator seems changed from "\" to "//"
assert(math.type(10 // 3) == "integer")
assert(10 + 3 == 13)
assert(math.type(10 + 3) == "integer")
assert(10.0 + 3 == 13.0)
assert(math.type
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值