我正在try 编写一个类似Excel的数据 struct :

use std::collections::HashMap;

struct Excel {
    columns: HashMap<&str, Vec<f64>>,
}

fn main() {}

但我有一个错误:

error[E0106]: missing lifetime specifier
 --> src/main.rs:4:22
  |
4 |     columns: HashMap<&str, Vec<f64>>,
  |                      ^ expected lifetime parameter

有人能帮我理解发生了什么吗?

推荐答案

"缺少生存期说明符"意味着在 struct 定义中,您没有告诉它允许对字符串片段的引用保留多长时间.为了确保代码的安全,它必须至少与 struct 保持相同的时间.

您需要在 struct 上定义一个生存期参数,并将其用于字符串切片.

struct Excel<'a> {
    columns: HashMap<&'a str, Vec<f64>>
}

这意味着字符串片段(HashMap键)有一些由Excel struct 的用户参数化的生存期.生命周期 是Rust 的关键特征之一.你可以在Rust documentation本书中读到更多关于生命的内容.

通常,定义拥有字符串的 struct 更简单.然后你可以用String.

struct Excel {
    columns: HashMap<String, Vec<f64>>
}

Rust相关问答推荐

使用windows crate Rust 展示windows

当为a Self:IntoIterator设置trait bind `时,获取`a T `不是迭代器"&'"<'>&'

PyReadonlyArray2到Vec T<>

交换引用时的生命周期

如何防止Cargo 单据和Cargo 出口发布( crate )项目

不能在Rust中使用OpenGL绘制三角形

如何强制匹配的返回类型为()?

具有多个键的 HashMap

Rust 中的内存管理

如何在 Rust 中将 Vec> 转换为 Vec>?

如何限制通用 const 参数中允许的值?

如果不满足条件,如何在 Rust 中引发错误

如何将这些测试放在一个单独的文件中?

使用 `clap` 在 Rust CLI 工具中设置布尔标志

为什么 Rust 允许写入不可变的 RwLock?

SDL2 没有在终端键上触发?

没有分号的返回表达式的性能是否比使用返回更好?在Rust ?

如何为返回正确类型的枚举实现 get 方法?

相交着色器从 SSBO 中读取零

list 中没有指定目标 - 必须存在 src/lib.rs、src/main.rs、[lib] 部分或 [[bin]] 部分