Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问Rust中位于枚举内的结构字段?_Rust - Fatal编程技术网

如何访问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);