Tag: 锈蚀

什么时候closures实现Fn,FnMut和FnOnce?

closures实施Fn , FnMut和FnOnce特性的具体条件是什么? 那是: 什么时候closures没有实现FnOnce特质? 什么时候closures没有实现FnMut特性? 什么时候closures不执行Fn特质? 例如,改变其正文的封闭状态,使得编译器不能在其上实现Fn 。

我用什么生命周期来创build相互引用的Rust结构?

我想有结构成员知道他们的父母。 这大概是我想要做的: struct Parent<'me> { children: Vec<Child<'me>>, } struct Child<'me> { parent: &'me Parent<'me>, i: i32, } fn main() { let mut p = Parent { children: vec![] }; let c1 = Child { parent: &p, i: 1 }; p.children.push(c1); } 我试图安抚编译器的生命,而没有完全理解我在做什么。 以下是我被卡住的错误消息: error[E0502]: cannot borrow `p.children` as mutable because `p` is also borrowed as […]

什么是Rust的确切的自动引用规则?

我正在学习/试验Rust,在我用这种语言发现的所有优雅中,有一个让我感到困惑的特性,似乎完全不合适。 在进行方法调用时,Rust会自动解引用指针。 我做了一些testing,以确定确切的行为: struct X { val: i32 } impl std::ops::Deref for X { type Target = i32; fn deref(&self) -> &i32 { &self.val } } trait M { fn m(self); } impl M for i32 { fn m(self) { println!("i32::m()"); } } impl M for X { fn m(self) { println!("X::m()"); } } impl<'a> […]

有没有办法返回一个函数中创build的variables的引用?

我想写一个程序,将分两步写一个文件。 在程序运行之前文件可能不存在。 文件名是固定的。 问题是OpenOptions.new().write()可能会失败。 在这种情况下,我想调用一个自定义函数trycreate() 。 这个想法是创build文件,而不是打开它,并返回一个句柄。 由于文件名是固定的, trycreate()没有参数,我不能设置返回值的生命周期。 我该如何解决这个问题? use std::io::Write; use std::fs::OpenOptions; use std::path::Path; fn trycreate() -> &OpenOptions { let f = OpenOptions::new().write(true).open("foo.txt"); let mut f = match f { Ok(file) => file, Err(_) => panic!("ERR"), }; f } fn main() { { let f = OpenOptions::new().write(true).open(b"foo.txt"); let mut f = match f […]