rust - 为什么 Vec<&str> 在这里缺少生命周期说明符?

标签 rust lifetime

<分区>

此代码编译:

struct IntDisplayable(Vec<u8>);

impl fmt::Display for IntDisplayable {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        for v in &self.0 {
            write!(f, "\n{}", v)?;
        }
        Ok(())
    }
}

fn main() {
        let vec: Vec<u8> = vec![1,2,3,4,5];
        let vec_Foo = IntDisplayable(vec);
        println!("{}",vec_Foo);
}

虽然这段代码没有:

struct StrDisplayable(Vec<&str>);

impl fmt::Display for StrDisplayable {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        for v in &self.0 {
            write!(f, "\n{}", v)?;
        }
        Ok(())
    }
}

fn main() {
        let vec: Vec<&str> = vec!["a","bc","def"];
        let vec_Foo = StrDisplayable(vec);
        println!("{}",vec_Foo);
}

错误信息:

error[E0106]: missing lifetime specifier
 --> src/lib.rs:3:27
  |
3 | struct StrDisplayable(Vec<&str>);
  |                           ^ expected lifetime parameter

我想做的是实现 fmt::Display对于 Vec<&str> ,通常需要包装 Vec喜欢this , 但它只适用于 Vec<u8> , 为什么要替换 Vec<u8>进入Vec<&str>导致这样的编译错误?

最佳答案

编译器被告知您正在借用一个值,但不知道它的有效期。它应该是静态的吗?还有别的吗?

我假设您正在尝试执行以下操作。

struct StrDisplayable<'a>(Vec<&'a str>);

这样,您就明确地告诉编译器,字符串的生命周期至少与结构一样长,不会更短。

您还需要在特征的实现中添加生命周期,如果使用 Rust 2018,则可以匿名。

关于rust - 为什么 Vec<&str> 在这里缺少生命周期说明符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57266481/

相关文章:

rust - 为什么有些开发人员使用 mod 测试进行测试?

hashmap - 无法将字符串以外的值添加到嵌套 HashMap

generics - 使用创建容器、向其中添加项、然后遍历项的通用函数,值不会存在足够长的时间

javascript - 为什么我保存的 D3 选择在某些情况下没有效果?

generics - 我可以使这个结构更通用吗?

c - 有没有办法让变量在当前范围之外的 1 个范围内存活?

rust - 如何制作可以反序列化为多种类型之一的 config.rs 字段?

generics - 我如何为另一个泛型类型的特征绑定(bind)表达类型参数的特征绑定(bind)?

rust - 无法弄清楚这个返回 Iter 的 Rust 函数的返回类型?

generics - 使用 AsRef 返回包含在输入包装器类型中的引用