Ржавчина не похожа на Python. В Rust вы должны знать размер всех ваших объектов в стеке во время компиляции. Если нет, то вы должны использовать динамические объекты, которые размещены в куче.
В C ++ или аналогичных языках вы создадите базовый класс, в котором оба ваших класса наследуют его. Таким образом, вы можете динамически создавать объект во время выполнения с типом, который вы выбираете в зависимости от условий выполнения. Это классический способ работы.
В Rust альтернатива называется «объектами черты», где оба ваших класса реализуют одну и ту же черту (так что черта играет роль базового класса). Вот как вы это делаете:
trait C {}
impl C for A {}
impl C for B {}
pub struct A {}
pub struct B {}
fn main() {
println!("Hello, world!");
let x = "a";
let s: Box<dyn C> = match x {
"a" => Box::new(A {}),
"b" => Box::new(B {}),
_ => panic!()
};
}
Box
- безопасный контейнер для указателя, который будет освобожден при выходе из этой области (если вы не решите передать его в другое место).
Играйте с этим кодом на детской площадке