在Lua中,对任何数字使用类型函数总是返回'number'.是否有一个函数可以告诉您Lua解释器是否使用32位浮点数,64位双精度数,整数或其他数字类型?
我试着写一个这样的函数:
function numbertype()
local rational = 5 / 2
if rational == 2 then
-- equals 2
return 'int'
else
-- about 2.5
return 'double' -- but could it be a 32 bit float or something else?
end
end
print(numbertype())
Run Code Online (Sandbox Code Playgroud)
它还无法检测到浮点数,双精度数和未知类型之间的差异.如何在Lua的解释器中查询Lua的数字类型是否等同于int,float或double?我希望它能用纯净的Lua工作.
Pure Lua不能从口译员那里询问这些事情.由于解释器使用不同类型的能力是相当自由的形式(您可以选择任何浮点或整数类型),将此公开给Lua的唯一方法是将解释器编码以预测每种可能的数字类型它可以编译.
一般来说,你不应该打扰照顾.使用除双打之外的其他应用程序的应用程序充其量是罕见的.甚至LuaJIT,它必须处理ARM及其可怕的浮点数学,仍然隐藏其有效地使用整数数学作为优化的能力; Lua代码无法区分.
这是应该的.