-
1 votesanswersviews
为什么特征绑定Trait <&String>不满意,即使我已经实现了Trait <&str>?
我写了以下代码: pub struct Serializer; pub trait Serialize<T> { fn to_bert(&self, data: T) -> Vec<u8>; } pub trait Convert<T> { fn to_binary(&self, data: T) -> Vec&l... -
9 votesanswersviews
如果生命周期未被使用,为什么在引用类型上实现特征时需要生命周期?
我正在为引用类型实现一个特征 . Why does Rust want an explicit lifetime when I tell it what reference type I'm implementing the trait for? 这是一个简单的例子 . struct Inches , &Inches 的 Add trait的实现,以及使用该实现的函数 . 初始示... -
0 votesanswersviews
Google Colab:关于VM上文件的生命周期
有没有人知道colab虚拟机上文件的生命周期?例如,在colab笔记本中,我将数据保存为csv文件,如下所示: data.to_csv('data.csv') 那么data.csv会存在多长时间? 这就是场景:我想每天维护和更新超过3000个小数据集,但似乎使用pydrive进行colab和google驱动之间的交互非常慢(因为我需要每天检查每个数据集),所以如果生命周期为虚拟机上的文件足够长,... -
9 votesanswersviews
为什么生命周期不能在结构定义中被省略?
struct Point { x: u32, y: u32, } struct Line<'a> { start: &'a Point, end: &'a Point, } 这里, start 和 end 字段唯一可能的选项是使生命周期与包含它们的 Line 变量相同或更长 . 我甚至无法想象如何使用终身说明符来表示字段的寿命更短 .... -
3 votesanswersviews
为什么Rust编译器请求我约束泛型类型参数的生命周期(错误E0309)?
为什么Rust编译器发出错误请求我约束以下结构中泛型参数的生命周期? pub struct NewType<'a, T> { x: &'a T, } error[E0309]: the parameter type `T` may not live long enough --> src/main.rs:2:5 | 2 | x: &'a T... -
6 votesanswersviews
如何声明一个比其封闭块更长寿的闭包
我想这个问题一般都是关于生命周期的,但我特别是因为你不能写出他们的类型而对闭包有困难 . 这个例子有点做作 - 我刚刚开始学习Rust,这是我一直挂着的东西 . 这个程序不会编译: fn main () { let mut list: Vec<&Fn() -> i32> = Vec::new(); { list.push(&|| ... -
3 votesanswersviews
使用带有特征对象的Ref :: map时无法推断生命周期
我有一个带有盒装特征的结构 A ( Foo ),另一个结构 BoxedA ,其中有一个 Rc<RefCell<A>> . 我正在尝试在 BoxedA 上创建一个方法,该方法将refrence返回到盒装特征,但在将 Ref<A> 映射到 Ref<Foo> 时仍会遇到生命周期问题 . 这是我的代码: use std::rc::Rc; use std::... -
3 votesanswersviews
Rust编译器用什么算法来推断生命周期变量?
fn foo<'a>(x: &'a i32, y: &'a i32) {} fn main() { let a = 123; { let b = 234; foo(&a, &b); } } 在上面的代码中, &a 和 &b 应该是不同生命周期的引用 . 编译器如何推断 foo ... -
0 votesanswersviews
使用具有显式生命周期的特征时,无法推断借用表达式的生存期
use std::io::BufReader; struct Foo { buf: [u8, ..10] } trait Bar<'a> { fn test(&self, arg: BufReader<'a>) {} } impl<'a, T: Bar<'a>> Foo { fn bar(&'a mut s... -
2 votesanswersviews
函数vs struct的类型参数(生命期问题)
考虑以下测试用例: #![allow(unstable)] trait Choose<'o> { fn choose(a: &'o u64, b: &'o u32) -> Self; } impl<'o> Choose<'o> for &'o u64 { fn choose(a: &'o u64, _... -
5 votesanswersviews
可循环借用
我有以下代码: struct Baz { x: usize, y: usize, } struct Bar { baz: Baz, } impl Bar { fn get_baz_mut(&mut self) -> &mut Baz { &mut self.baz } } struct Foo { ... -
3 votesanswersviews
PathBuf的寿命不够长
我正在尝试在构建脚本中使用以下代码: use std::path::PathBuf; use std::env; use std::ffi::AsOsStr; fn main() { let mut string = env::var("CARGO_MANIFEST_DIR").unwrap(); let mut main_dir = PathBuf::new... -
9 votesanswersviews
Value 不够长
我并不完全了解生命,但我认为 b 的生命将在 self 之前结束 . 那么,如何编辑这段代码呢?我在内存中复制一些东西吗?如果我创建一个新实例,这个生命周期必须遵循这种情况 . pub struct Formater { layout: &'static str, } impl Formater { pub fn new(layout: &'static str)... -
2 votesanswersviews
当内联的相同代码没有时,为什么闭包会引入借位?
此代码有效: extern crate num; use num::{BigInt, FromPrimitive, Zero}; fn sample() { let mut to_factor = "600851475143".parse::<BigInt>().unwrap(); let mut prime = BigInt::from_i3... -
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()) ... -
1 votesanswersviews
为什么`Cell特别适用于借阅检查器? [重复]
这个问题在这里已有答案: Is this error due to the compiler's special knowledge about RefCell? 1回答 How does the Rust compiler know Cell has internal mutability? 3个答案 我有 Cell ( UnsafeCell / RefCell / ...)参... -
3 votesanswersviews
模拟作用域垃圾收集的生命周期约束
我正和一位朋友一起为“范围”垃圾收集器的生命周期定义一个安全的公共API . 生命周期要么过度约束,正确的代码不能编译,或者生命周期太松,它们可能允许无效行为 . 尝试多种方法后,我们仍然无法获得正确的API . 这特别令人沮丧,因为Rust的生命周期可以帮助避免在这种情况下的错误,但现在它看起来很顽固 . Scoped垃圾收集 我正在实现一个ActionScript解释器,需要一个垃圾收集器 .... -
7 votesanswersviews
返回保守的impl特征时,生命周期意味着什么?
在搜索有关保守impl trait的文档时,I found this example: struct A { x: [(u32, u32); 10] } impl A { fn iter_values<'a>(&'a self) -> impl 'a + Iterator<Item = u32> { self.x.iter()... -
5 votesanswersviews
什么生锈的生命周期实际上意味着什么?
所以,在: fn v1<'a> (a:~[&'a str]) -> ~[&'a str] { return a; } #[test] fn test_can_create_struct() { let x = v1("Hello World".split(' ').collect()); } 我知道,我读过http://static... -
2 votesanswersviews
具有生命周期参数的特征是什么意思?
我理解生命周期参数如何应用于函数和结构,但是 trait 具有生命周期参数意味着什么?将生命周期参数引入其方法是一种捷径,还是其他什么? -
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 ... -
0 votesanswersviews
如何修复:预期的具体生命周期,但找到绑定的生命周期参数
我现在正在聆听这个问题 . 我试图将它缩小到一个可重复性最小的例子 . struct Request; struct ResponseWriter<'a> { dummy: &'a () } #[deriving(Clone)] pub struct RouteStore{ pub routes: Vec<Route>, } #[deriv... -
9 votesanswersviews
锈蚀寿命误差预期具体寿命但发现约束寿命
我在使用结构的生命周期参数时遇到问题 . 我不是100%肯定如何描述问题,但我创建了一个显示我的编译时错误的简单案例 . struct Ref; struct Container<'a> { r : &'a Ref } struct ContainerB<'a> { c : Container<'a> } trait ToC { fn ... -
2 votesanswersviews
类型不匹配解析一个通过引用获取参数的闭包
我在尝试编译下面的Rust代码时遇到了一对奇怪的错误 . 在搜索有类似问题的其他人时,我遇到了another question with the same combination of (seemingly opposing) errors,但无法将解决方案从那里推广到我的问题 . 基本上,我似乎在Rust的所有权系统中缺少一个微妙的东西 . 在这里尝试编译(非常削减)代码: struct Poi... -
3 votesanswersviews
函数引用:预期的约束生命周期参数,找到具体的生命周期[E0271]
关于这个主题已经有很多线程但是我没有看到讨论的问题是否适用于我的具体问题 . 我有一个存储 name 和 callback 函数的结构 . 剥离问题看起来像这样: pub struct Command<'a> { name: &'a str, callback: &'a Fn(&[&str]) -> () } impl <'... -
0 votesanswersviews
保留u8数组返回值中变量的生命周期
我想要了解Rust生命周期 . 虽然我似乎理解它们,但我似乎并不知道解决它的最佳方法 . 这是一个函数,我使用* ring *包生成SHA256 HMAC . 以下是复制问题的函数的简化版本: fn sign<'b>(data: &[u8], key: &[u8]) -> &'b [u8] { let hmac_key = hmac::Signin... -
23 votesanswersviews
有没有办法返回对函数中创建的变量的引用?
我想编写一个程序,分两步编写一个文件 . 在程序运行之前,该文件可能不存在 . 文件名是固定的 . 问题是 OpenOptions.new().write() 可能会失败 . 在这种情况下,我想调用自定义函数 trycreate() . 我们的想法是创建文件而不是打开它并返回一个句柄 . 由于文件名是固定的, trycreate() 没有参数,我无法设置返回值的生命周期 . 我该如何解决这个问题... -
0 votesanswersviews
从闭包返回并使用可变引用的迭代器
是否有任何使用闭包返回 Iterator<Item = &mut T> 的函数示例? 我想编写一些Rust函数,这些函数遍历集合的内容多次,可能是向后迭代 . 单独使用 IntoIterator 是不够的,因为它通过值来消耗其参数以防止多次迭代 . 迭代器可以经常克隆,但是可变引用的迭代器 . 如果我们真的只需要对集合的确切元素进行迭代,那么我们可以将 &mut C: ... -
1 votesanswersviews
返回引用以及Rust中引用的对象[duplicate]
这个问题在这里已有答案: Why can't I store a value and a reference to that value in the same struct? 2个答案 在Rust中使用 Future 时,通常会在使用lambdas实现的链接处理步骤之间传递对象的所有权(例如,连接,已处理的数据等) . 我理解这个概念并且在没有问题的情况下做了很多 . 我正在尝试做同样的事情... -
3 votesanswersviews
返回在Rust中捕获外部变量的闭包
正如 Headers 所述,我希望从一个具有初始可变状态的函数返回一个闭包 . 在以下示例中, CowRow 是带有 time 字段的 struct . 它还有一个 String 字段,因此不可复制 . 具体来说,我想要一个看起来像这样的函数: pub fn agg1() -> Box<Fn(&CowRow)> { let res = 0; Box::n...