Rust 如何将字符串映射到结构?

Rust 如何将字符串映射到结构?,rust,Rust,我有一些结构,如: pub struct A {} pub struct B {} 我想将这些结构映射到字符串映射: let s = match x { "a" => A {}, "b" => B {}, _ => panic!() } 就像一条Python格言。我怎样才能在Rust中做到这一点呢?Rust不像Python。在Rust中,您必须在编译时知道堆栈上所有对象的大小。如果没有,则必须使用在堆上分配的动态对象 在C++或类似语言中,你将创

我有一些结构,如:

pub struct A {}

pub struct B {}
我想将这些结构映射到字符串映射:

let s = match x {
    "a" => A {},
    "b" => B {},
    _ => panic!()
} 

就像一条Python格言。我怎样才能在Rust中做到这一点呢?

Rust不像Python。在Rust中,您必须在编译时知道堆栈上所有对象的大小。如果没有,则必须使用在堆上分配的动态对象

<>在C++或类似语言中,你将创建一个基类,其中两个类都继承它。通过这种方式,您可以在运行时动态创建一个对象,其类型由您根据运行时条件选择。这是做事的经典方式

在Rust中,另一种方法称为“trait对象”,在这里,两个类实现相同的trait(因此trait扮演基类的角色)。以下是您的操作方法:

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!()
    };
}
trait C{}
A{}的impl C
B{}的impl C
发布结构A{}
发布结构B{}
fn main(){
println!(“你好,世界!”);
设x=“a”;
让s:Box=匹配x{
“a”=>Box::new(a{}),
“b”=>Box::new(b{}),
_=>恐慌!()
};
}
Box
是指针的安全容器,当您退出此作用域时,指针将被释放(除非您选择将其传递到其他地方)


上使用此代码Rust与Python不同。在Rust中,您必须在编译时知道堆栈上所有对象的大小。如果没有,则必须使用在堆上分配的动态对象

<>在C++或类似语言中,你将创建一个基类,其中两个类都继承它。通过这种方式,您可以在运行时动态创建一个对象,其类型由您根据运行时条件选择。这是做事的经典方式

在Rust中,另一种方法称为“trait对象”,在这里,两个类实现相同的trait(因此trait扮演基类的角色)。以下是您的操作方法:

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!()
    };
}
trait C{}
A{}的impl C
B{}的impl C
发布结构A{}
发布结构B{}
fn main(){
println!(“你好,世界!”);
设x=“a”;
让s:Box=匹配x{
“a”=>Box::new(a{}),
“b”=>Box::new(b{}),
_=>恐慌!()
};
}
Box
是指针的安全容器,当您退出此作用域时,指针将被释放(除非您选择将其传递到其他地方)


您可以在

上使用此代码,但这根本不像“python dict”。您似乎需要的是一个。如果这些链接不能回答您的问题,请解释您的需要并构建一个。请注意,rust是一种强类型语言。您的代码示例很难理解。是否要将一些创建的结构存储到字典中,然后从中检索它们?或者您只是想创建并返回这些结构,就像您在问题上分享的一样?您可以这样做,但这根本不像“python dict”。您似乎需要的是一个。如果这些链接不能回答您的问题,请解释您的需要并构建一个。请注意,rust是一种强类型语言。您的代码示例很难理解。是否要将一些创建的结构存储到字典中,然后从中检索它们?或者你只是想创建并返回这些结构,就像你在这个问题上分享的一样?我同意这是一个很好的方法。但是,有时可以避免
对值进行加密(例如,如果直接将其传递给函数)。对于这些情况,我提出了一个丑陋的宏(请参阅),可以使用不同的类型进行调度。我同意这是一个很好的方法。但是,有时可以避免
对值进行加密(例如,如果直接将其传递给函数)。对于这些情况,我提出了一个丑陋的宏(请参阅),它可以使用不同的类型进行调度。