Gre*_*reg 7 struct runtime rust
我想创建一个函数(对于库),它将为包含所有列及其数据的任何CSV输出结构.这意味着列名称(除非用户明确提供)在运行时才会知道.
是否可以在运行时创建结构定义或改变现有结构?如果是这样,怎么样?
例如,我如何改变以下结构结构:
struct Point {
x: String,
y: String,
}
Run Code Online (Sandbox Code Playgroud)
对于以下内容(仅在内存中):
struct Point {
x: String,
y: String,
z: String,
}
Run Code Online (Sandbox Code Playgroud)
这种行为在Python等语言中是可行的,但我不确定它是否可以在Rust等编译语言中使用.
不,这是不可能的.
简化,在编译时,计算每个结构的布局(排序,偏移,填充等),允许结构的大小已知.生成代码时,抛弃所有这些高级信息,机器代码知道将X字节跳转到访问字段foo.
将源代码转换为机器代码的这种机制都不存在于Rust可执行文件中.如果是这样,每个Rust可执行文件可能会获得几百兆字节(当前的Rust工具链的重量为300 + MB).
其他语言通过拥有共享的运行时或解释器来解决这个问题.例如,如果没有先安装共享的Python解释器,就无法获取Python源文件并运行它.
另外,Rust是一种静态类型语言.当您有值时,您确切知道哪些字段和方法可用.使用动态生成的结构无法做到这一点 - 当您编写试图使用它的代码时,无法确定字段/方法是否实际存在.
正如评论中所指出的,动态数据需要动态数据结构,例如a HashMap.