相关疑难解决方法(0)

什么是非词汇生命?

Rust有一个与非词汇生命周期相关的RFC,已被批准在该语言中实现了很长时间.最近,Rust对此功能的支持有了很大改进,并且被认为是完整的.

我的问题是:非词汇生命究竟是什么?

lifetime rust lifetime-scoping

63
推荐指数
1
解决办法
6149
查看次数

如何将创建包含具有生命周期的Cell的结构的函数传递给另一个函数?

我正在尝试将构造函数作为参数传递给另一个函数.该函数创建一个具有关联生命周期的结构.我创建了一些此结构可以引用的其他对象后,我需要从this指针创建一个结构.以下示例似乎有效:

struct Bar<'a> {
    number: Option<&'a usize>,
}

impl<'a> Bar<'a> {
    pub fn new() -> Bar<'a> {
        Bar { number: None }
    }
}

fn foo<'a, F>(func: &F)
where
    F: Fn() -> Bar<'a>,
{
    let number = 42;
    let mut bar = (func)();
    bar.number = Some(&number);
}

fn main() {
    foo(&Bar::new);
}
Run Code Online (Sandbox Code Playgroud)

当我添加一个Cell内部可变性时,它不会编译:

use std::cell::Cell;

struct Bar<'a> {
    number: Cell<Option<&'a usize>>,
}

impl<'a> Bar<'a> {
    pub fn new() -> Bar<'a> {
        Bar {
            number: Cell::new(None),
        } …
Run Code Online (Sandbox Code Playgroud)

lifetime rust

12
推荐指数
1
解决办法
157
查看次数

为什么这个价值不够长寿?

我不明白为什么我从这段代码中得到以下编译器错误:

struct Superhero<'a> { name: &'a String, power: &'a i32 } //  1    
                                                          //  2    
fn main() {                                               //  3    
    let n = "Bruce Wayne".to_string();                    //  4    
    let r;                                                //  5    
    {                                                     //  6    
        let p = 98;                                       //  7    
        {                                                 //  8    
            let hero = Superhero{ name: &n, power: &p };  //  9    
            r = hero.name;                                // 10    
        }                                                 // 11    
        println!("{}", r);                                // 12    
    }                                                     // 13    
}                                                         // 14    
Run Code Online (Sandbox Code Playgroud)

编译器错误: rustc 1.27.1 (5f2b325f6 2018-07-07)

error[E0597]: `p` does …
Run Code Online (Sandbox Code Playgroud)

lifetime lexical-scope rust borrowing

5
推荐指数
1
解决办法
150
查看次数