-
5 votesanswersviews
使用带切片的结构时,“借来的值不够长”
编者注:此问题中的代码早于Rust 1.0 . 从那以后,语义发生了变化,问题中的一些断言不再成立 . 我有以下代码: extern crate debug; use std::mem::size_of_val; struct A<'a> { a: &'a [i64], } fn main() { // code } 当我使用 & (即 &a... -
4 votesanswersviews
在创建Vec时,借用的值不够长
编者注:在Rust 1.0之前询问过这个问题 . 从那时起,许多函数和类型都发生了变化,某些语言语义也发生了变化 . 问题中的代码不再有效,但答案中表达的想法可能是 . 我正在尝试列出目录中的文件并将文件名复制到我自己的 Vec . 我理解我的错误 . fn getList(action_dir_path : &str) -> Vec<&str> { ... -
2 votesanswersviews
to_string()导致错误“借来的值不够长”
为什么 to_string() 会导致 borrowed value does not live long enough 错误?示例如下: use std::collections::HashMap; struct Foo { id: Option<usize>, name: String } fn main() { let foos = getFoos(... -
0 votesanswersviews
借用的值不够长 - 字符串切片到HashMap
我无法编译我的函数 . 它总是抱怨借来的 Value 不够长 . 我已经用字符串切换切换了HashMap的顺序,因为我认为破坏顺序会影响HashMap比输入的字符串切片长一步 . 但即使在更改后它仍然不起作用: CODE fn lyrics_more_bottles(song_template:&mut String, number:i32){ let mut start_bott... -
2 votesanswersviews
借用的值不够长(BufReader lines()到String的迭代器)
使用此示例代码: use std::fs::{File}; use std::io::{BufRead, BufReader}; use std::path::Path; type BoxIter<T> = Box<Iterator<Item=T>>; fn tokens_from_str<'a>(text: &'a str) ->... -
157 votesanswersviews
为什么我不能在同一个结构中存储值和对该值的引用?
我有一个值,我想在我自己的类型中存储该值以及对该值内部内容的引用: struct Thing { count: u32, } struct Combined<'a>(Thing, &'a u32); fn make_combined<'a>() -> Combined<'a> { let thing = Thing { coun... -
2 votesanswersviews
如何从RefCell <T>借用T作为参考?
有时我有 struct 包含一个包含在 RefCell 中的值,我想借用该值,但我不想让访问器函数的签名依赖于内部实现 . 为了使它工作,我需要将引用作为 Ref<T> 而不是 &T 返回 . 例如,如果这是我的结构: use std::cell::RefCell; pub struct Outer<T> { inner: RefCell<T>... -
8 votesanswersviews
借用嵌套lambda中变量不够长的借用检查错误
我在嵌套的lambda中得到一个错误 . let rows = vec![ vec![3, 6, 2, 8, 9, 0], vec![0, 0, 1, 4, 5, 1], ]; let pair_sums = rows.iter() .flat_map(|row| { (0 ..= row.len()).map(|i| row[i] + row[i + 1... -
1 votesanswersviews
rustc_serialize ::在while循环中借用的Json值不够活跃
这段代码: extern crate rustc_serialize; use rustc_serialize::json; use rustc_serialize::json::Json; fn main() { let mut string: String = "{\"num\": 0}".to_string(); let mut ... -
4 votesanswersviews
在迭代向量时,如何改变向量中的另一个项,而不是向量本身?
对我来说很明显,迭代向量不应该让循环体任意地改变向量 . 这可以防止迭代器失效,这容易出错 . 但是,并非所有类型的突变都会导致迭代器失效 . 请参阅以下示例: let mut my_vec: Vec<Vec<i32>> = vec![vec![1,2], vec![3,4], vec![5,6]]; for inner in my_vec.iter_mut() { ... -
157 votesanswersviews
为什么我不能在同一个结构中存储值和对该值的引用?
我有一个值,我想在我自己的类型中存储该值以及对该值内部内容的引用: struct Thing { count: u32, } struct Combined<'a>(Thing, &'a u32); fn make_combined<'a>() -> Combined<'a> { let thing = Thing { coun... -
3 votesanswersviews
参考盒装 Value 的生命周期不够长
以下代码无法编译: use std::borrow::Borrow; struct Inner<'a> { v: Vec<&'a u8>, } struct Foo<'a> { inner: Inner<'a>, derp: Box<u8>, } impl<'a> Foo<'a>... -
157 votesanswersviews
为什么我不能在同一个结构中存储值和对该值的引用?
我有一个值,我想在我自己的类型中存储该值以及对该值内部内容的引用: struct Thing { count: u32, } struct Combined<'a>(Thing, &'a u32); fn make_combined<'a>() -> Combined<'a> { let thing = Thing { coun... -
157 votesanswersviews
为什么我不能在同一个结构中存储值和对该值的引用?
我有一个值,我想在我自己的类型中存储该值以及对该值内部内容的引用: struct Thing { count: u32, } struct Combined<'a>(Thing, &'a u32); fn make_combined<'a>() -> Combined<'a> { let thing = Thing { coun... -
8 votesanswersviews
如何在不烦扰借用检查器的情况下建模双向 Map ?
从Why can't I store a value and a reference to that value in the same struct?我了解到我无法在同一个结构中存储值和引用 . 建议的解决方案是: 最简单和最推荐的解决方案是不要试图将这些项目放在同一个结构中 . 通过这样做,您的结构嵌套将模仿代码的生命周期 . 将拥有数据的类型放在一起放在一个结构中,然后提供允许您根据需要获... -
157 votesanswersviews
为什么我不能在同一个结构中存储值和对该值的引用?
我有一个值,我想在我自己的类型中存储该值以及对该值内部内容的引用: struct Thing { count: u32, } struct Combined<'a>(Thing, &'a u32); fn make_combined<'a>() -> Combined<'a> { let thing = Thing { coun... -
2 votesanswersviews
如何通过引用计数组织Rust中同一对象的多个引用? [重复]
这个问题在这里已有答案: How to represent shared mutable state? 2个答案 Situations where Cell or RefCell is the best choice 3个答案 Need holistic explanation about Rust's cell and reference counted types 2个答案 我... -
1 votesanswersviews
在包含引用的临时值上执行生存期
我正在使用HashMap,但我在如何"release"对 HashMap 的可变借用方面磕磕绊绊,并且找不到如何做到这一点的好解释 . 这只是一个例子,目标不是“解决问题”,而是要了解如何实现这一目标和/或为什么不应该这样做 . 该示例包含一个 HashMap 存储一些简单的 Record : type Map = HashMap<String, Record>; ... -
2 votesanswersviews
当自我被借入封闭内部时,使用静态生命周期触发“封闭可能会超过功能”
我的程序使用变量的内存地址作为唯一标识符 . 我知道这非常难看,但它是获取唯一标识符的一种非常轻量级的方法 . This pattern is only valid if I make these variables static so their unique id (i.e. address) lives "forever" 这意味着我有几个函数需要 'static 生... -
6 votesanswersviews
如何将C可变长度数组代码转换为Rust?
我知道Rust不支持可变长度数组,但是这让我想知道如何替换它们,因为: 我不想在循环中分配和释放一个微小的Vec 借用检查器不允许我在循环外移动代码 固定大小的数组有很多限制,所以我无法弄清楚如何使用它们 我正在转换的C代码通过调用每一行上的回调来处理图像,传递一小部分指针: float *tmp[img->channels]; // Small, up to 4 eleme... -
5 votesanswersviews
借用值对于struct来说没有足够长的编译器错误
我是语言新手,仍在与借阅检查员作斗争 . 我已经看到一些库使用没有参数的new()函数a.k.a.构造函数并且它可以工作 . 基本上这意味着,返回的数据是在new的函数范围内创建的,并且在新范围的末尾不会被删除 . 当我自己尝试这个时,借用检查器不会让这个代码通过 . 除了将i32可变引用作为参数传递给构造函数之外,如何使其工作 . 我错过了什么吗? #[derive(Debug)] struct... -
3 votesanswersviews
试图从RwLock返回引用,“借来的值不够长”错误
我最近一直在研究我的第一个Rust项目,但遇到了障碍 . 我使用 HashMap 映射 String s到 AtomicUsize 整数 . HashMap 受 RwLock 保护,以允许并发访问 . 我希望能够在 HashMap 中返回对 AtomicUsize 值的引用,但是如果我尝试在 RwLockWriteGuard 的生命周期之后将这些引用返回给调用者,则会收到 borrowed ... -
2 votesanswersviews
“借来的 Value 不够长”,插入错误
我有一个简单的trie实现,其中 Edge 包含一个字符和另一个 Node 的引用: struct Edge<'a> { ch: char, to: &'a Node<'a>, } Node 包含边矢量: pub struct Node<'a> { edges: Vec<Edge<'a>>, } 我正在... -
14 votesanswersviews
借用检查器没有意识到`clear`会丢弃对局部变量的引用
以下代码从stdin读取空格分隔的记录,并将逗号分隔的记录写入stdout . 即使使用优化的构建,它也相当慢(大约是使用的两倍,比如awk) . use std::io::BufRead; fn main() { let stdin = std::io::stdin(); for line in stdin.lock().lines().map(|x| x.unwrap()) ... -
22 votesanswersviews
从一个借用它的循环内部操作一个对象
我在Rust中编写了一些连接到远程服务器的代码,根据该服务器发送的消息,计算一些统计信息或根据这些统计信息执行操作 . 但这对我来说更像是一个学习项目,而且我遇到了一个问题 . 这是我已经减少到最低限度以重现问题的代码: // Repro code for error[E0502]: cannot borrow `*self` as mutable because `self.server` is... -
5 votesanswersviews
无法摆脱借来的内容和Builder模式
我只是在学习Rust . 我正在尝试为我的Game结构创建一个构建器结构 . 这是代码: struct Input { keys_pressed: HashMap<VirtualKeyCode, bool>, } pub struct GameBuilder { settings: GameSettings, input: Input, } impl Gam... -
1 votesanswersviews
我可以使用像值传递的可变引用方法吗?
我可以使用像值传递的可变引用方法吗?例如,我可以使用 o.mth(&mut self, ...) 如 o.mth(self, ...) 这将允许我返回结果而不用担心 o 的生命周期 . 它可能涉及 move 闭包,或某种包装? 对于上下文,我'm trying to return a boxed iterator over CSV records using the rust-csv ... -
1 votesanswersviews
通过“堆分配”修复对活动不够长的引用的限制
博客文章系列Understanding Lifetime in Rust以悬崖形式结尾,总结如下...... struct Car { model: String, } struct Person<'a> { car: Option<&'a Car>, } impl<'a> Person<'a> { fn new(... -
12 votesanswersviews
借用Box <Trait>内容如何工作?
我有this minimal example code: use std::borrow::BorrowMut; trait Foo {} struct Bar; impl Foo for Bar {} fn main() { let mut encryptor: Box<Foo> = Box::new(Bar); encrypt(encryptor.borrow... -
-2 votesanswersviews
如何在不查看代码的情况下读取生命周期错误?
我收到以下生命周期错误: error[E0495]: cannot infer an appropriate lifetime for autoref due to conflicting requirements --> prusti-viper/src/procedures_table.rs:42:40 | 42 | let mut cfg = self.cfg...