如何访问Rust中位于枚举内的结构字段?
下面是代码片段,说明了问题:如何访问Rust中位于枚举内的结构字段?,rust,Rust,下面是代码片段,说明了问题: pub enum Foo1{ 酒吧(二) } pub enum Foo2{ 内部(3) } 发布结构Foo3{ 发布日期:i32 } fn main(){ 设s2=Foo1::Bar(Foo2::Inner(Foo3{val:5})); //println!(“{}”,s2.);//我想打印Foo3结构的val字段 } 没有模式匹配怎么做?通常,当您只对一个匹配分支感兴趣时,我会使用if let: 如果让Foo1::Bar(Foo2::internal(foo3)
pub enum Foo1{
酒吧(二)
}
pub enum Foo2{
内部(3)
}
发布结构Foo3{
发布日期:i32
}
fn main(){
设s2=Foo1::Bar(Foo2::Inner(Foo3{val:5}));
//println!(“{}”,s2.);//我想打印Foo3结构的val字段
}
没有模式匹配怎么做?通常,当您只对一个匹配分支感兴趣时,我会使用
if let
:
如果让Foo1::Bar(Foo2::internal(foo3))=s2{
println!(“{}”,foo3.val);
}
您的情况是不寻常的,因为您的枚举中没有一个元素超过一个——if始终为true,这将引发“无可辩驳的\u let\u模式”警告
与其(针对特定语句)压制此警告,直接let绑定就足够了:
让Foo1::Bar(Foo2::internal(foo3))=s2;
普林顿!(“{}”,foo3.val);
谢谢你,塞巴斯蒂安·雷德尔,谢谢你的提示 我找到了要找的东西。现场破坏是我需要的
如果让Foo1::Bar(Foo2::internal(Foo3{val:x}))=s2{
println!(“{}”,x)
}
副本中的答案基本上总结了您的选项:匹配
,如果让
,或者如果您的枚举只有一个像您发布的那样的变量,则可能只有让
。由于枚举只有一个分支,并且模式是无可辩驳的,因此您可以使用直接让绑定,而不使用if:让1::Bar(Foo2::Inner(Foo3{val}));println(“{}”,val);