【问题标题】:How to access argument of tuple enum inside method in Rust如何在 Rust 中访问元组枚举的参数
【发布时间】:2020-01-01 11:32:05
【问题描述】:

在下面的代码中,如何访问字符串"hello"(我在定义m时传递的)?

enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}

impl Message {
    fn call(&self) {
        // How to access "hello" string from here?
    }
}

let m = Message::Write(String::from("hello"));
m.call();

【问题讨论】:

  • if let Message::Write(x) = self { ... }的模式匹配

标签: enums rust


【解决方案1】:

你需要使用模式匹配来提取字符串:

if let Message::Write(s) = self {
    assert_eq!(s, "hello");
}

Playground

【讨论】:

    【解决方案2】:

    由于enum Message 可以处于任意数量的状态,因此您必须处于正确的状态才能提取 hello。

    fn call(&self) {
       match self {
          Message::Write(string) => println!("{}", string),
          _ => {},
       }
    }
    

    Rust playground link

    编辑:user4815162342 解决方案也是正确的,您可以交替使用matchif let

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 2011-11-10
      • 2022-06-12
      相关资源
      最近更新 更多