相关疑难解决方法(0)

什么是非词汇生命?

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

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

lifetime rust lifetime-scoping

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

是否允许多态变量?

我有各种结构,都实现相同的特征.我想在某些条件下进行分支,在运行时决定实例化哪些结构.然后,无论我遵循哪个分支,我都想从该特征中调用方法.

这可能在Rust吗?我希望实现类似下面的内容(不编译):

trait Barks {
    fn bark(&self);
}

struct Dog;

impl Barks for Dog {
    fn bark(&self) {
        println!("Yip.");
    }
}

struct Wolf;

impl Barks for Wolf {
    fn bark(&self) {
        println!("WOOF!");
    }
}

fn main() {
    let animal: Barks;
    if 1 == 2 {
        animal = Dog;
    } else {
        animal = Wolf;
    }
    animal.bark();
}
Run Code Online (Sandbox Code Playgroud)

rust

14
推荐指数
3
解决办法
655
查看次数

在旋转变量时,"无法移出变量,因为它是借用的"

我正在编写一个程序,该程序写入文件并随时旋转它正在写入的文件.当我检查旋转文件时,我似乎无法更改文件,因为它是由我的struct借用的.即使我drop是结构的实例,我似乎无法重新获得文件的所有权来重命名它.这是我的例子:

use std::fs::File;
use std::io::{Write};
use std::mem::{drop};

pub struct FileStruct<W: Write> {
    pub writer: Option<W>,
}

impl <W: Write> FileStruct<W> {
    pub fn new(writer: W) -> FileStruct<W> {
        FileStruct {
            writer: Some(writer),
        }
    }
}

fn main() {
    let mut file = File::create("tmp.txt").unwrap();
    let mut tmp = FileStruct::new(&mut file);
    loop {
        if true { //will be time based if check
            drop(tmp);
            drop(file);
            file = File::create("tmp2.txt").unwrap();
            tmp = FileStruct::new(&mut file);
        }
        // write to file
    }
} …
Run Code Online (Sandbox Code Playgroud)

rust borrow-checker

6
推荐指数
1
解决办法
660
查看次数

调用`drop`后移动的变量仍在借用?

fn main() {
    let mut x: Vec<&i32> = vec![];
    let a = 1;
    x.push(&a);
    drop(x);
    // x.len(); // error[E0382]: use of moved value: `x`
}  // `a` dropped here while still borrowed
Run Code Online (Sandbox Code Playgroud)

编译器知道drop()丢弃x(从注释掉的代码中的错误可以看出),但仍然认为变量是借用的a!这不公平!

这应该被认为是众多生锈/锈病#6393之一(现在由rust-lang/rfcs#811跟踪?)但是那里的讨论似乎集中在一个块中制作&mut self&self共存.

lifetime rust

5
推荐指数
2
解决办法
861
查看次数

标签 统计

rust ×4

lifetime ×2

borrow-checker ×1

lifetime-scoping ×1