RUST:更好的(simpler/pritter)方法来使用结构中的枚举?
RUST: Better (simpler/pritter) way to use enum from struct?
也许这是一个有点奇怪的问题,但是有没有更好的(simpler/prettier)方法来使用“来自结构的枚举”?没有“选项”?请。
下面是一些简单的代码变体:“仅限结构”、“仅限枚举”和该死的“来自结构的枚举”...
如果可以在提供的代码中使用“您的建议”,那么获取提示可能会容易得多。
fn main() {
// ---- STRUCT only:
#[derive(Debug)]
struct Ipv4Addr {
v4: (u8, u8, u8, u8),
}
#[derive(Debug)]
struct Ipv6Addr {
v6: String,
}
let home = Ipv4Addr { v4: (127, 0, 0, 1) };
let loopback = Ipv6Addr {
v6: String::from("::1"),
};
println!("\n\tStruct:\n");
println!("home: {:?} , loopback: {:?}", home, loopback);
// ---- ENUM 1 - only enum:
#[derive(Debug)]
enum IpAddr2 {
V4(u8, u8, u8, u8),
V6(String),
}
let home1 = IpAddr2::V4(127, 0, 0, 1);
let loopback1 = IpAddr2::V6(String::from("::1"));
println!("\n\tEnum1:\n");
println!("home1: {:?}, loopback1: {:?}\n", home1, loopback1);
// ---- ENUM 2 - from Struct:
#[derive(Debug)]
enum IpAddr {
V4(Ipv4Addr),
V6(Ipv6Addr),
}
let home2 = IpAddr::V4(Ipv4Addr { v4: (127, 0, 0, 1) }); // <-- *a little "meh"?
let loopback2 = IpAddr::V6(Ipv6Addr {
v6: ("::1").to_string(), // <-- *?
});
println!("\n\tEnum2:\n");
println!("home2: {:?}, loopback2: {:?}\n", home2, loopback2);}
为什么不能为此使用元组结构?像
struct Ipv4(u8,u8,u8,u8);
struct Ipv6(String); // isn't ipv6 8*u16?
enum IpAddr {
V4(Ipv4),
V6(Ipv6),
}
fn main() {
let ip4 = IpAddr::V4(Ipv4(192,168,0,1));
let ip6 = IpAddr::V6(Ipv6("::1".into()));
}
也许这是一个有点奇怪的问题,但是有没有更好的(simpler/prettier)方法来使用“来自结构的枚举”?没有“选项”?请。
下面是一些简单的代码变体:“仅限结构”、“仅限枚举”和该死的“来自结构的枚举”... 如果可以在提供的代码中使用“您的建议”,那么获取提示可能会容易得多。
fn main() {
// ---- STRUCT only:
#[derive(Debug)]
struct Ipv4Addr {
v4: (u8, u8, u8, u8),
}
#[derive(Debug)]
struct Ipv6Addr {
v6: String,
}
let home = Ipv4Addr { v4: (127, 0, 0, 1) };
let loopback = Ipv6Addr {
v6: String::from("::1"),
};
println!("\n\tStruct:\n");
println!("home: {:?} , loopback: {:?}", home, loopback);
// ---- ENUM 1 - only enum:
#[derive(Debug)]
enum IpAddr2 {
V4(u8, u8, u8, u8),
V6(String),
}
let home1 = IpAddr2::V4(127, 0, 0, 1);
let loopback1 = IpAddr2::V6(String::from("::1"));
println!("\n\tEnum1:\n");
println!("home1: {:?}, loopback1: {:?}\n", home1, loopback1);
// ---- ENUM 2 - from Struct:
#[derive(Debug)]
enum IpAddr {
V4(Ipv4Addr),
V6(Ipv6Addr),
}
let home2 = IpAddr::V4(Ipv4Addr { v4: (127, 0, 0, 1) }); // <-- *a little "meh"?
let loopback2 = IpAddr::V6(Ipv6Addr {
v6: ("::1").to_string(), // <-- *?
});
println!("\n\tEnum2:\n");
println!("home2: {:?}, loopback2: {:?}\n", home2, loopback2);}
为什么不能为此使用元组结构?像
struct Ipv4(u8,u8,u8,u8);
struct Ipv6(String); // isn't ipv6 8*u16?
enum IpAddr {
V4(Ipv4),
V6(Ipv6),
}
fn main() {
let ip4 = IpAddr::V4(Ipv4(192,168,0,1));
let ip6 = IpAddr::V6(Ipv6("::1".into()));
}