Я хотел бы создать не двоичную древовидную структуру в Rust. ПопробуйтеArray as a struct field
struct TreeNode<T> {
tag : T,
father : Weak<TreeNode<T>>,
childrenlists : [Rc<TreeNode<T>>]
}
К сожалению, это не скомпилировано.
main.rs:4:1: 8:2 error: the trait `core::marker::Sized` is not implemented for the type `[alloc::rc::Rc<TreeNode<T>>]` [E0277]
main.rs:4 struct TreeNode<T> {
main.rs:5 tag : T,
main.rs:6 father : Weak<TreeNode<T>>,
main.rs:7 childrenlist : [Rc<TreeNode<T>>]
main.rs:8 }
main.rs:4:1: 8:2 note: `[alloc::rc::Rc<TreeNode<T>>]` does not have a constant size known at compile-time
main.rs:4 struct TreeNode<T> {
main.rs:5 tag : T,
main.rs:6 father : Weak<TreeNode<T>>,
main.rs:7 childrenlist : [Rc<TreeNode<T>>]
main.rs:8 }
error: aborting due to previous error
Код компилируется, если заменить массив с Vec
. Тем не менее, структура неизменна, и мне не нужен общий номер Vec
.
Я слышал, что может быть возможно иметь поле структуры с неизвестным размером во время компиляции при условии, что оно уникально. Как мы можем сделать это?
Я думал, что это требование было «последним», но в любом случае это также имеет место здесь. Я нашел https://www.reddit.com/r/rust/comments/357ji5/using_structs_with_a_dst_array_member/ –
В Rust * массивы * имеют фиксированный размер, известный во время компиляции. Таким образом, вам не нужен «массив». '& [T]' обычно называется * срезом *, я не знаю, как произносится «[T]». – Shepmaster
@Shepmaster Я предполагаю, что это будет «unsized array». –