gpt4 book ai didi

struct - 是否可以在运行时定义结构或以其他方式实现类似的效果?

转载 作者:行者123 更新时间:2023-11-29 07:46:26 24 4
gpt4 key购买 nike

我想创建一个函数(用于库),它将为包含所有列及其数据的任何 CSV 输出一个结构。这意味着列名(除非用户明确提供)直到运行时才知道。

是否可以在运行时创建结构定义或改变现有结构?如果是,怎么办?

例如,我如何改变以下结构:

struct Point {
x: String,
y: String,
}

以下内容(仅在内存中):

struct Point {
x: String,
y: String,
z: String,
}

这种行为在 Python 等语言中是可能的,但我不确定在 Rust 等编译语言中是否可能。

最佳答案

不,这是不可能的。

简化后,在编译时,计算每个结构的布局(排序、偏移、填充等),从而可以知道结构的大小。当代码生成时,所有这些高级信息都被丢弃,机器代码知道将 X 字节跳转到访问字段 foo

Rust 可执行文件中没有任何将源代码转换为机器代码的机制。如果是这样,每个 Rust 可执行文件可能会增加数百兆字节(当前的 Rust 工具链重达 300+MB)。

其他语言通过共享运行时或解释器来解决这个问题。例如,如果不先安装共享的 Python 解释器,就无法获取 Python 源文件并运行它。

此外,Rust 是一种静态类型语言。当你有一个值时,你就会确切地知道哪些字段和方法是可用的。使用动态生成的结构无法做到这一点——当您编写尝试使用它的代码时,无法判断字段/方法是否实际存在。


评论中指出,动态数据需要动态数据结构,比如HashMap .

关于struct - 是否可以在运行时定义结构或以其他方式实现类似的效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47159418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com