gpt4 book ai didi

rust - Rust 中类似 Java 枚举的行为

转载 作者:行者123 更新时间:2023-12-03 11:33:40 25 4
gpt4 key购买 nike

我想要一个枚举,其中枚举中的每个值都存储一个常量字节数组,表示颜色的 RGBA 值。在 Java 中我会这样做:

public enum Color {
BLACK([0x0C, 0x00, 0x05, 0xFF]),
BLUE([0x00, 0x2D, 0xFF, 0xFF]),
RED([0xFF, 0x3E, 0x00, 0xFF]);

private final byte[] rgba;

Color(byte[] rgba) {
this.rgba = rgba;
}

public int[] value() {
return rgba;
}
}

然后我可以传递 Color 类型并只使用 color.value() 来获取字节。这是我在 Rust 中拥有的:

struct Color;

impl Color {
pub const BLACK: [u8; 4] = [0x0C, 0x00, 0x05, 0xFF];
pub const BLUE: [u8; 4] = [0x00, 0x2D, 0xFF, 0xFF];
pub const RED: [u8; 4] = [0xFF, 0x3E, 0x00, 0xFF];
}

但这意味着我想在任何地方传递 Color 类型是 [u8; 4]。我可以调用结构 Colors 然后执行 pub type Color = [u8; 4]。然后你可以将类型设置为 Color 但它会是 Colors::BLACK 这看起来很奇怪。

最佳答案

如果您希望Color 结构中的字节数组具有强类型,您可以使用以下表示法,称为tuple struct。 :

struct Color([u8; 4]);

impl Color {
pub const BLACK: Color = Color([0x0C, 0x00, 0x05, 0xFF]);
pub const BLUE: Color = Color([0x00, 0x2D, 0xFF, 0xFF]);
pub const RED: Color = Color([0xFF, 0x3E, 0x00, 0xFF]);
}

fn main() {
// classic way of accessing data
println!("{:?}", Color::BLACK.0);

// using destructuring
let Color(bytes) = Color::BLUE;
println!("{:?}", bytes);
}

Playground link

关于rust - Rust 中类似 Java 枚举的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65588189/

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