列出Erlang中进程可用的可用记录
记录是编译时结构。记录信息和is记录识别已编译的记录及其结构。是否有办法询问VM已定义哪些记录可供流程使用?我对获取每个记录定义的内部元组表示感兴趣 我想做的是: -记录(汽车,{make=honda}) 获取_记录(汽车)-> %%这里有些神奇的东西最终会变成这样列出Erlang中进程可用的可用记录,erlang,records,Erlang,Records,记录是编译时结构。记录信息和is记录识别已编译的记录及其结构。是否有办法询问VM已定义哪些记录可供流程使用?我对获取每个记录定义的内部元组表示感兴趣 我想做的是: -记录(汽车,{make=honda}) 获取_记录(汽车)-> %%这里有些神奇的东西最终会变成这样 {汽车,{制造,本田}}甚至更好{汽车{}的确是。%%当Car='Car'时,正如您所说,记录只是一个编译时构造,所以一旦编译的记录只是元组,这就意味着在运行时没有留下可用的信息,但由于您提到了这两个函数,我很好奇,并检查了它们是如
{汽车,{制造,本田}}甚至更好{汽车{}的确是。%%当Car='Car'时,正如您所说,记录只是一个编译时构造,所以一旦编译的记录只是元组,这就意味着在运行时没有留下可用的信息,但由于您提到了这两个函数,我很好奇,并检查了它们是如何工作的
根据
record\u info/2
是一个仅在编译期间可用的伪函数,因此它不需要记录的任何运行时信息
另一方面,的描述指出,该BIF(内置函数)仅“如果术语是一个元组,并且其第一个元素是记录标签,则返回true
,否则为false
”,因此它实际上只检查元组的结构和第一个元素
基于此,我猜在运行时没有可用的记录信息。确认运行时记录\u info/2不可用。正如您所说的记录只是一个编译时构造,因此一旦编译的记录只是元组,这表明运行时没有可用信息,但由于您提到了这两个函数,我很好奇,并检查了它们的工作方式
根据record\u info/2
是一个仅在编译期间可用的伪函数,因此它不需要记录的任何运行时信息
另一方面,的描述指出,该BIF(内置函数)仅“如果术语是一个元组,并且其第一个元素是记录标签,则返回true
,否则为false
”,因此它实际上只检查元组的结构和第一个元素
基于此,我猜在运行时没有可用的记录信息。确认运行时记录\u info/2不可用。我已在数据映射模块中成功地为我当前正在使用的一个应用程序使用了Dynarec()。不过,它是一个解析转换器,而不是运行时VM工具。它编译关于每个已定义记录的信息,以及关于每个记录的字段的信息。在我的例子中,我使用它动态地将传入数据映射到记录数据。本模块可能会满足您的需求。YMMV。祝你好运。我已经成功地将Dynarec()用于我目前正在开发的一个应用程序的数据映射模块中。不过,它是一个解析转换器,而不是运行时VM工具。它编译关于每个已定义记录的信息,以及关于每个记录的字段的信息。在我的例子中,我使用它动态地将传入数据映射到记录数据。本模块可能会满足您的需求。YMMV。祝你好运。正如其他人所说,记录纯粹是编译时的,没有关于记录的运行时信息。Erlang只看到元组。例如,record\u info/2
伪函数在编译时扩展为数据,字段的原子列表
参数和大小的整数
,正如其他人所说,记录纯粹是编译时的,没有关于记录的运行时信息。Erlang只看到元组。例如,record\u info/2
伪函数在编译时被扩展为数据,字段的原子列表
参数和大小的整数是的,确实如此,这正是我想要的,但我想确保没有解析转换就无法得到它。该库的代码看起来非常整洁。对于日志模块,我有很多语法转换——不管怎样,更大。谢谢哦,你会怎么做呢?比如:得到你的名字(#car{})->车?在该特定实例中,只需查看记录的元组形式的第一个元素#foo{bar=baz}在代码中仍然表示为{foo,baz}。谢谢,我没有意识到我可以做{Name,{u}=Car。是的,是的,这正是我想要的,但是我想确保没有解析转换就无法得到它。该库的代码看起来非常整洁。对于日志模块,我有很多语法转换——不管怎样,更大。谢谢哦,你会怎么做呢?比如:得到你的名字(#car{})->车?在该特定实例中,只需查看记录的元组形式的第一个元素#foo{bar=baz}在代码中仍然表示为{foo,baz}。谢谢,我没有意识到我可以做{Name,{}=Car。record\u info/2
是在编译期间自动创建的,它可以在任何时候访问,特别是在运行期间。根据@mpm,我看不到我指向的文档中说运行时哪里有可用的record\u info/2
。您只需在定义了记录的模块中调用Module:Module\u info(functions)
,即可检查这一点,您将看到未定义任何record\u info/2
。@mpm请检查是否确认运行时record\u info/2
不可用。我已更正。不知何故,我一定很困惑record\u info/2
可以用shell中的rr
函数做什么(这是一个有点神奇的地方)。如果您对答案添加任何编辑,我将能够删除“投票否决”。record\u info/2
在编译过程中自动创建,并且在任何时候都可以访问,尤其是在运行时。根据@mpm,我看不到我指向的文档中说运行时哪里有可用的record\u info/2
。您只需调用Module:Module