46得票3回答
如何在单个函数中接受 &str、String 和 &String?

我想编写一个单独的函数,它接受一个 &str,一个 String 和一个借用的 &String。我已经编写了以下两个函数:fn accept_str_and_ref_string(value: &str) { println!("value: {}", valu...

41得票1回答
价值存在时间不够长

我不完全了解lifetime,但我认为b的lifetime将会在self之前结束。 那么,如何编辑这段代码?我需要复制内存中的某些内容吗?如果我创建一个新的实例,它的lifetime必须符合这种情况。pub struct Formater { layout: &'static...

31得票2回答
为什么在闭包参数中使用"&&"?

关于这个示例,我有两个问题: let a = [1, 2, 3]; assert_eq!(a.iter().find(|&&x| x == 2), Some(&2)); assert_eq!(a.iter().find(|&&x| x == 5), ...

28得票1回答
如何解决“String字段未实现`Copy`”的问题?

我正在使用Rust构建一个简单的命令行待办事项应用程序。如果我不实现复制特性,则会出现以下错误:"move occurs because 'todo' has type 'todo::Todo', which does not implement the 'Copy' trait&q...

27得票4回答
在迭代递归结构时无法获取可变引用:同一时间无法作为可变借用多次。

我试图迭代地导航递归数据结构,以便在特定位置插入元素。据我所知,这意味着获取对该结构根部的可变引用,并将其逐步替换为对其后继者的引用:type Link = Option<Box<Node>>; struct Node { next: Link } stru...

24得票2回答
如何将一个包含字符串的HashSet转换成Vector?

我试图将一个HashSet<String>转换为一个经过排序的向量,然后可以用逗号进行join:use std::collections::HashSet; fn main() { let mut hs = HashSet::<String>::new(); ...

22得票4回答
无法推断返回引用的闭包的适当生命周期

考虑以下代码:fn foo<'a, T: 'a>(t: T) -> Box<Fn() -> &'a T + 'a> { Box::new(move || &t) } 我期望的结果: 类型 T 的生命周期为 'a。 值 t 的寿命与 ...

21得票2回答
为什么Rust禁止多个可变引用?

就像题目中所说,为什么Rust会防止多个可变引用?我已经读过rust-book的章节了,我理解当我们有多线程代码时,可以确保不会发生数据竞争,但是让我们看一下这段代码:fn main() { let mut x1 = String::from("hello"); let r1 ...

21得票1回答
何时应该使用引用而不是转移所有权?

从Rust书籍所有权章节中得知,不可拷贝的值可以通过转移所有权或使用可变或不可变引用传递给函数。当你转移一个值的所有权时,它就不能在原始函数中使用了:如果你想要使用它,必须将其返回。当你传递一个引用时,你借用了这个值,并且仍然可以使用它。 我来自那些默认情况下数值是不可变的语言(如Haske...

17得票2回答
如何决定函数输入参数是否应该是引用?

在编写函数时,如何决定使输入参数成为引用参数还是传值参数? 例如,我应该这样做吗? fn foo(val: Bar) -> bool { check(val) } // version 1 或者使用引用参数来替代? fn foo(val: &Bar) -> boo...