7得票1回答
`impl Trait`类型的返回值如何进行借用检查?

以下代码无法编译: fn foo<'a, F: Fn() -> &'a str>(vec: Vec<i32>, fun: F) -> impl Iterator<Item = i32> { println!("{}", fun(...

24得票2回答
在循环中尝试更新Option<&str>时,出现“借用期间被丢弃的临时值”的错误提示。

我正在尝试实现一个常用模式 - 在下一次循环迭代中使用上一次循环迭代的结果。例如,实现需要提供上一页最后一个值的分页。struct Result { str: String, } fn main() { let times = 10; let mut last...

9得票2回答
为什么我不能从枚举中可变地借用基本类型?

我希望能够获取到在Foo枚举中被包裹在Bar中的usize的引用(不可变和可变都可以): use Foo::*; #[derive(Debug, PartialEq, Clone)] pub enum Foo { Bar(usize) } impl Foo { /* th...

7得票2回答
如何使一个函数返回一个字符串向量?

我有一个打开文件并逐行搜索内容的大块代码,对于每个匹配的行都会做某些处理。我想把它分解成自己的函数,该函数接受文件路径并提供匹配的行,但我无法弄清楚如何正确地分解它。 以下是我认为接近正确的代码,但我却收到了编译错误: /// get matching lines from a path ...

9得票1回答
当借用在方法调用之后时,如何借用两个不相交的字段?

在下面的代码中,我有一个带有只读字段 a 和一堆可读写字段的结构体 Foo。当直接从结构体借用单独的字段时,没有任何问题。但是,当我将借用隐藏在方法调用后面时,它说我不再可以借用。 #![allow(unused_variables)] #![allow(unused_mut)] #![al...

37得票1回答
从HashMap或Vec返回引用会导致借用超出其所在的范围?

我一直遇到一个编译错误,Rust抱怨我在尝试可变借用时有一个不可变借用,但是不可变借用来自另一个范围,并且我没有从中携带任何内容。 我有一些代码,在映射中检查值,如果存在,则返回它,否则需要以各种方式改变映射。问题在于,即使这两个操作完全分开,我似乎也找不到让Rust让我这样做的方法。 ...

36得票1回答
可变引用是否具有移动语义?

fn main() { let mut name = String::from(&quot;Charlie&quot;); let x = &amp;mut name; let y = x; // x has been moved say_hello...

8得票2回答
何时使用静态生命周期不合适?

我在网络上找到了很多有关Rust生命周期的信息,包括关于静态生命周期的信息。在某些情况下,必须保证引用将活得比其他所有东西都更长,这对我来说是有道理的。 例如,我有一个传递给线程的引用,并且编译器要求将引用标记为静态。在这种情况下,这似乎是有道理的,因为编译器无法知道线程的生存时间,因此需要...

14得票1回答
这个错误是由编译器对RefCell的特殊知识引起的吗?

fn works&lt;'a&gt;(foo: &amp;Option&lt;&amp;'a mut String&gt;, s: &amp;'a mut String) {} fn error&lt;'a&gt;(foo: &amp;RefCell&lt;Option&lt;&amp;'a ...

22得票1回答
如何替换 Mutex 内的值?

我有一个Git仓库,它被隐藏在一个Mutex后面: pub struct GitRepo { contents: Mutex&lt;GitContents&gt;, workdir: PathBuf, } 我想查询它,但只能最多查询一次:在查询过后,我希望只使用我们第一次...