Как вы на самом деле используете динамически изменяемые типы в Rust?
Теоретически приземлились динамические типы (DST), и теперь мы должны иметь возможность использовать экземпляры динамического размера. Практически, я не могу ни заставить это работать, ни понять тесты вокруг этого.
Кажется, все вращается вокругSized?
ключевое слово ... но как именно вы его используете?
Я могу соединить несколько типов:
// Note that this code example predates Rust 1.0
// and is no longer syntactically valid
trait Foo for Sized? {
fn foo(&self) -> u32;
}
struct Bar;
struct Bar2;
impl Foo for Bar { fn foo(&self) -> u32 { return 9u32; }}
impl Foo for Bar2 { fn foo(&self) -> u32 { return 10u32; }}
struct HasFoo<Sized? X> {
pub f:X
}
... но как мне создать экземплярHasFoo
, который является DST, чтобы иметь либоBar
или жеBar2
?
Попытка сделать это всегда, кажется, приводит к:
<anon>:28:17: 30:4 error: trying to initialise a dynamically sized struct
<anon>:28 let has_foo = &HasFoo {
В общем, я понимаю, что у вас не может быть голого динамического типа; Вы можете взаимодействовать только с одним указателем, но я не могу понять, как это сделать.