我正在尝试将构造函数作为参数传递给另一个函数.该函数创建一个具有关联生命周期的结构.我创建了一些此结构可以引用的其他对象后,我需要从this指针创建一个结构.以下示例似乎有效:
struct Bar<'a> {
number: Option<&'a usize>,
}
impl<'a> Bar<'a> {
pub fn new() -> Bar<'a> {
Bar { number: None }
}
}
fn foo<'a, F>(func: &F)
where
F: Fn() -> Bar<'a>,
{
let number = 42;
let mut bar = (func)();
bar.number = Some(&number);
}
fn main() {
foo(&Bar::new);
}
Run Code Online (Sandbox Code Playgroud)
当我添加一个Cell内部可变性时,它不会编译:
use std::cell::Cell;
struct Bar<'a> {
number: Cell<Option<&'a usize>>,
}
impl<'a> Bar<'a> {
pub fn new() -> Bar<'a> {
Bar {
number: Cell::new(None),
} …Run Code Online (Sandbox Code Playgroud) 我不明白为什么我从这段代码中得到以下编译器错误:
struct Superhero<'a> { name: &'a String, power: &'a i32 } // 1
// 2
fn main() { // 3
let n = "Bruce Wayne".to_string(); // 4
let r; // 5
{ // 6
let p = 98; // 7
{ // 8
let hero = Superhero{ name: &n, power: &p }; // 9
r = hero.name; // 10
} // 11
println!("{}", r); // 12
} // 13
} // 14
Run Code Online (Sandbox Code Playgroud)
编译器错误: rustc 1.27.1 (5f2b325f6 2018-07-07)
error[E0597]: `p` does …Run Code Online (Sandbox Code Playgroud)