首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用变量而不是文字匹配枚举结构字段

用变量而不是文字匹配枚举结构字段
EN

Stack Overflow用户
提问于 2022-09-07 11:43:36
回答 1查看 56关注 0票数 1

我在试着匹配一个枚举结构。这个枚举有不同的变体,有不同的(或没有)字段,例如:

代码语言:javascript
复制
enum Enum {
    One {n : usize},
    Two ,
} 

我试图实现的匹配块如下所示:

代码语言:javascript
复制
match m {
    Enum::One{n: special_value} => {
        println!("it is special! {}", special);
    }
    Enum::One{n} => {
        println!("not special: {}", n);
    }
    Enum::Two => {
        println!("not special");
    }
}

如果我定义了let m = Enum::One{n: 3}let special_value = 8,代码就会打印it is special! 3。这应该会打印not special: 3

如果我将匹配块更改为(请注意,我将变量special_value变量更改为文字8 )

代码语言:javascript
复制
match m {
    Enum::One { n: 8 } => {
        println!("it is special!");
    }
    Enum::One { n } => {
        println!("not special: {}", n);
    }
    Enum::Two => {
        println!("not special");
    }
}

现在定义let m = Enum::One { n: 3 },它将打印为所需的not special: 3

在我的实际项目中,我不能使用文字来匹配函数调用中作为变量的值。

对于这个豪宅,我可以使用这个匹配块(请注意,特例已被移除,并由一般情况下的if子句替换):

代码语言:javascript
复制
match m {
    Enum::One { n } => {
        if n == special_value {
            println!("it is special! {}", special_value);
        } else {
            println!("not special: {}", n);
        }
    }
    Enum::Two => {
        println!("not special");
    }
}

是否可以在匹配中使用变量,还是强制使用if子句?原因何在?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-07 14:11:26

yes。您可以在匹配臂上添加if statements,而无需在匹配臂块中创建if块。

这对你有用吗?

代码语言:javascript
复制
enum Enum {
    One {
        n: usize
    },
    Two
}

fn main() {
    let special_value = 123;
    let m = Enum::One { n: 123 };
    match m {
        
        Enum::One { n } if n == special_value => println!("it is special! {}", special_value),
        Enum::One { n } => println!("not special: {}", n),
        Enum::Two => {
            println!("not special");
        }
    }
}

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=acfaae3976e7ca9fcf096c635a4daf98

为我工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73634904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档