Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua获取数字类型_Lua - Fatal编程技术网

Lua获取数字类型

Lua获取数字类型,lua,Lua,在Lua中,对任何数字使用type函数总是返回“number”。是否有一个函数可以告诉您Lua解释器是使用32位浮点、64位双精度、整数还是其他数字类型 我试着写一个这样的函数: 函数编号类型() 局部有理数=5/2 如果rational==2,那么 --等于2 返回“int” 其他的 --大约2.5 返回'double'——但它可能是32位浮点还是其他什么? 结束 结束 打印(numbertype()) 它还无法检测浮点、双精度和未知类型之间的差异。如何查询Lua的数字类型是否与Lua解释器

在Lua中,对任何数字使用type函数总是返回“number”。是否有一个函数可以告诉您Lua解释器是使用32位浮点、64位双精度、整数还是其他数字类型

我试着写一个这样的函数:

函数编号类型()
局部有理数=5/2
如果rational==2,那么
--等于2
返回“int”
其他的
--大约2.5
返回'double'——但它可能是32位浮点还是其他什么?
结束
结束
打印(numbertype())

它还无法检测浮点、双精度和未知类型之间的差异。如何查询Lua的数字类型是否与Lua解释器中的int、float或double等效?我希望它能在纯Lua中工作。

根据,数字只是双精度浮点数。要使用另一种类型,必须使用修改后的
luaconf.h

重新编译Lua。根据,数字仅为双精度浮点数字。要使用另一种类型,必须使用修改的
luaconf.h
重新编译Lua。纯Lua无法从解释器查询此类内容。由于解释器使用不同类型的能力是非常自由的(您可以选择任何浮点或整数类型),向Lua公开这一点的唯一方法是对解释器进行编码,以预测它可以使用的每种可能的数字类型

一般来说,你不应该费心去关心。使用double以外的东西的应用程序最多也很少见。即使是必须处理ARM及其糟糕的浮点数学的LuaJIT,仍然隐藏着将整数数学有效地用作优化的能力;Lua代码无法区分两者之间的区别


这是应该的。

纯Lua不能向解释器询问这些事情。由于解释器使用不同类型的能力是非常自由的(您可以选择任何浮点或整数类型),向Lua公开这一点的唯一方法是对解释器进行编码,以预测它可以使用的每种可能的数字类型

一般来说,你不应该费心去关心。使用double以外的东西的应用程序最多也很少见。即使是必须处理ARM及其糟糕的浮点数学的LuaJIT,仍然隐藏着将整数数学有效地用作优化的能力;Lua代码无法区分两者之间的区别


这是应该的。

也许您可以使用以下工作区。计算数字%1。如果余数为0,则它很可能是一个整数。

也许您可以使用以下方法。计算数字%1。如果余数是0,则很可能是一个整数。

从catwell评论中的有用资源中,我编写了一个函数,可以根据字节码头返回数字类型。该函数很有用,但决不能使用它,因为它只适用于特定的解释器。对于Lua5.2或luajit,它需要完全重写,这会给代码重用造成不必要的负担

相反,lua脚本应该独立于解释器或使用的数字类型来编写

为了完整起见,这里是函数:

——仅适用于Lua5.1
函数numbertype()
本地标题类型={
['\4\1']='int32',
['\8\1']='int64',
['\4\0']='float32',
['\8\0']='float64'}
--如果类型是其他类型,则返回nil
返回headertypes[string.dump(函数()end):sub(11,12)]
结束

根据catwell评论中的有用资源,我编写了一个函数,可以根据字节码头返回数字类型。该函数很有用,但决不能使用它,因为它只适用于特定的解释器。对于Lua5.2或luajit,它需要完全重写,这会给代码重用造成不必要的负担

相反,lua脚本应该独立于解释器或使用的数字类型来编写

为了完整起见,这里是函数:

——仅适用于Lua5.1
函数numbertype()
本地标题类型={
['\4\1']='int32',
['\8\1']='int64',
['\4\0']='float32',
['\8\0']='float64'}
--如果类型是其他类型,则返回nil
返回headertypes[string.dump(函数()end):sub(11,12)]
结束

是的,但我想问解释器它是为哪种数字类型编译的。是的,但我想问解释器它是为哪种数字类型编译的。虽然不完全是纯Lua,但是否可以读取string.dump()返回的字节码头中的数字大小?@user1721424:您需要非常熟悉从该函数中转储的内容。即使这样,也可能只会给您一个大小(不管C数据类型如何,它可能总是使用8个字节);你无法区分
float
int
@user1721424之间的区别:这看起来像是一个,你试图做一些你认为需要做的事情来解决,但是你还没有告诉我们你想做什么,你认为你需要这样做。@catflier:其他应用程序通常使用的是什么,与手头的主题无关。Lua使用双精度,大多数人不会重新编译他们的Lua库来使用浮点数,因为他们在Lua之外使用浮点数。这里的方法是错误的,但是你可以从字节码头中找到很多关于数字类型的信息。要区分float和int之间的区别,数字大小后面有一个布尔字段(请参阅或我自己的解析器)。虽然不是纯Lua,但是否可以读取string.dump()返回的字节码头中的数字大小?@user1721424:您需要非常熟悉从该函数中转储的内容。即使这样,这也可能只会给你一个大小(它可能总是使用8个字节)