Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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
Enums 如何将字符串转换为枚举?_Enums_Casting_Rust - Fatal编程技术网

Enums 如何将字符串转换为枚举?

Enums 如何将字符串转换为枚举?,enums,casting,rust,Enums,Casting,Rust,我的任务是创建一个名为的方法,该方法将返回一个切片,但我不确定这是正确的方法,因为该代码没有编译 enum WSType { ACK, REQUEST, RESPONSE, } impl WSType { fn to_str(&self) -> &str { match self { ACK => "ACK", REQUEST => "REQUEST",

我的任务是创建一个名为
的方法,该方法将返回一个切片,但我不确定这是正确的方法,因为该代码没有编译

enum WSType {
    ACK,
    REQUEST,
    RESPONSE,
}

impl WSType {
    fn to_str(&self) -> &str {
        match self {
            ACK => "ACK",
            REQUEST => "REQUEST",
            RESPONSE => "RESPONSE",            
        }
    }
}

fn main() {
    let val = "ACK";
    // test
    match val {
        ACK.to_str() => println!("ack"),
        REQUEST.to_str() => println!("ack"),
        RESPONSE.to_str() => println!("ack"),
        _ => println!("unexpected"),
    }
}

正确的做法是实施。这里,我将匹配表示每个枚举变量的字符串文字:

#[derive(Debug)]
enum WSType {
    Ack,
    Request,
    Response,
}

impl std::str::FromStr for WSType {
    type Err = String;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            "ACK" => Ok(WSType::Ack),
            "REQUEST" => Ok(WSType::Request),
            "RESPONSE" => Ok(WSType::Response),
            _ => Err(format!("'{}' is not a valid value for WSType", s)),
        }
    }
}

fn main() {
    let as_enum: WSType = "ACK".parse().unwrap();
    println!("{:?}", as_enum);

    let as_enum: WSType = "UNKNOWN".parse().unwrap();
    println!("{:?}", as_enum);
}

@Shepmaster是的,你是对的,它不编译。我想我应该在原帖中提到它。我试图将随机字符串片段与特定枚举匹配。谢谢@Shepmaster,它看起来很完美。
use strum_macros::EnumString;

#[derive(Debug, EnumString)]
#[strum(serialize_all = "shouty_snake_case")]
enum WSType {
    Ack,
    Request,
    Response,
}