SPIRALI:
Tak jasně. To by snad mělo být: Root::new() -> Rc[Self]. Ale dobře. Chápu tedy, že mi to nebude automaticky předávat jako self: Rc[Root]. OK.
Podařilo se mi to zjednodušit. Toto funguje:
struct Item {
name: String
}
struct Root {
name: String,
items: Vec<Item>,
}
fn append_to_root(root: &mut Root, name: String) {
root.items.push(Item { name: name });
}
fn main() {
let mut root = Root {name: "/".to_string(), items: vec![] };
append_to_root(&mut root, "Alef".to_string());
println!("C: {}", root.name);
println!("D: {}", root.items.len());
}
Když začnu předávat Rc, a pokud to chápu dobře, tak musím předávat Rc:
use std::rc::Rc;
struct Item {
name: String
}
struct Root {
name: String,
items: Vec<Item>,
}
fn append_to_root(root: &mut Rc<Root>, name: String) {
root.items.push(Item { name: name });
}
fn main() {
let mut root = Rc::new(Root {name: "/".to_string(), items: vec![] });
append_to_root(&mut root, "Alef".to_string());
println!("C: {}", root.name);
println!("D: {}", root.items.len());
}
tak to odmítne s:
error[E0596]: cannot borrow data in an `Rc` as mutable
--> src/main.rs:14:5
|
14 | root.items.push(Item { name: name });
| ^^^^^^^^^^ cannot borrow as mutable
Omlouvám se, vůbec se nechytám :-(