一般情况,只用实现From,这2种方式都可以做类型做转换。 比如这样:let s = String::from("Hello world!");let s: String = "Hello world!".into();我们再来看一下 Into 是怎么让代码变的灵活的吧。use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};fnprint(v: implInto<IpAddr>) {println!("{:?}...
在新的 IpAddr 枚举定义中,V4 和 V6 两个成员都被关联上了一个 String 值: enumIpAddr{V4(String),V6(String), }fnmain() {lethome= IpAddr::V4(String::from("127.0.0.1"));letloopback= IpAddr::V6(String::from("::1")); } 我们直接将数据附加到了枚举的每个成员中,这样便不需要额外地使用...
还是以 IP 地址为例,IPv4 地址总是由 4 个 0~255 之间的整数部分组成。假如我们希望使用 4 个 u8 值来代表 V4 地址,并依然使用 String 值来代表 V6 地址,那么结构体就无法轻易实现这一目的了,而枚举则可以轻松地处理此类情形: enumIpAddr{ V4(u8,u8,u8,u8), V6(String) } fnmain() { lethome = ...
enumIpAddr{ V4(u8,u8,u8,u8), V6(String), } fnmain() { letv4= IpAddr::V4(192.168.1.1); letv6= IpAddr::V4(String::from("::1")); } 再比如rust标准库中的IpAddr的定义: structIpv4Addr{} structIpv6Addr{} enumIpAddr{ V4(Ipv4Addr), V6(Ipv6Addr), } 也可以是多种数据类型 enumM...
enum IpAddrKind { // 现在 IpAddrKind 就是一个可以在代码中使用的自定义数据类型了。 V4, V6, } struct IpAddr { kind:IpAddrKind, address:String, } fn main() { let home = IpAddr { kind:IpAddrKind::V4, address:String::from("127.0.01"), ...
From<[u8; 4],转换 IPv4 地址 print([1, 1, 1, 1]); // IPAddr 实现了 From<[...
IPV4 (String), IPV6 (String),} 使用:let loopback = IpAddr::IPV4("127.0.0.1".to_string()); // 定义了一个ipv4地址,其值“127.0.0.1” 简单起见,可以理解为rust 的枚举,融合了C枚举和联合体,实现了数据类型和关联数据的定义和绑定。 一个稍微复杂一点的枚举类型: ...
struct IpAddr { kind: IpAddrKind, address: String, } fn main() { let home = IpAddr { kind: IpAddrKind::V4, address: String::from("127.0.0.1") }; let loopback = IpAddr { kind: IpAddrKind::V6, address: String::from("::1") }; ...
enum IpAddr { V4(u8, u8, u8, u8), V6(String), } let home = IpAddr::V4(127, 0, 0, 1); let loopback = IpAddr::V6(String::from("::1")); Rust 标准库中常用枚举 IpAddr 枚举:用来存储和编码 IP 地址。 代码语言:javascript 复制 enum IpAddr { V4(Ipv4Addr), V6(Ipv6Addr), }...
struct IpV6Addr{ //--snip-- } enum IpAddr { V4(IpV4Addr), V6(IpV6Addr) } ## 1.3、变体的多种嵌套方式 ```rust enum Message { Quit, Move {x:i32,y:u32}, Write(String), ChangeColor(i32,i32,i32) } fn main() { let q=Message::Quit; ...