gpt4 book ai didi

rust - Rust 中 "compose"枚举的正确方法

转载 作者:行者123 更新时间:2023-12-02 18:25:16 24 4
gpt4 key购买 nike

我希望能够有一个总和类型,它是两个枚举成员之一,但不确定我是否正确执行此操作。这个想法是 Token或者 CoordinateAA以及 process_line返回 Token 的数组s。非常基本。但是我必须包装Token(...)吗?大约每个 CoordinateAA我将它们初始化为这样?

struct Coordinate {
x: f64,
y: f64,
z: f64
}

enum AminoAcid {
VAL, GLN ,ARG,
LEU, THR ,TYR,
SER, PRO ,CYS,
GLY, ALA ,MET
}

enum Token {
Coordinate(Coordinate),
AminoAcid(AminoAcid)
}

// Want a function that returns a list of legal tokens given a &line.
fn _process_line(line:&str)->Vec<Token>{
let token = Token::AminoAcid(AminoAcid::ARG);
return vec![token];
}

例如,在 typescript 中我可以这样做

type A = "Fur" | "Silver" | "Glass"
type B = "Leather" | "Wood" | "Bronze"
type Material = A | B;

var x: Material = "Wood" // is okay

而在这里我必须做全部Material("Wood")事物类型

let token = Token::AminoAcid(AminoAcid::ARG);
let token = AminoAcid::ARG; // it would have been great to just have this, is this possible?

最佳答案

您可以实现From对于每个内部类型。通过实现它,您可以调用 Into::into在您的内部类型实例上获取外部枚举表示:

struct Coordinate{
x:f64, y:f64, z:f64
}

enum AminoAcid {
VAL, GLN ,ARG,
LEU, THR ,TYR,
SER, PRO ,CYS,
GLY, ALA ,MET
}

enum Token {
Coordinate(Coordinate),
AminoAcid(AminoAcid)
}

impl From<Coordinate> for Token {
fn from(coord: Coordinate) -> Self {
Self::Coordinate(coord)
}
}

impl From<AminoAcid> for Token {
fn from(aminoacid: AminoAcid) -> Self {
Self::AminoAcid(aminoacid)
}
}

// Want a function that returns a list of legal tokens given a &line.
fn _process_line(line:&str)->Vec<Token>{
return vec![AminoAcid::ARG.into()];
}

Playground

关于rust - Rust 中 "compose"枚举的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70311058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com