Dzwebs.Net

撰写电脑技术杂文十余年

rust enum枚举结构通过impl关键字获取其变量值的代码

Admin | 2023-2-9 21:42:27 | 被阅次数 | 1339

温馨提示!

如果未能解决您的问题,请点击搜索;登陆可复制文章,点击登陆

  在rust中使用enum枚举,可以让枚举的变量使用不同的数据类型,相当方便。但是你知道么?想通过enum获取其变量值,也不是一件容易的事情,总之,是一件相当恼人的事情。

  今天,本人专门为解决此问题,写下这篇杂文,希望大家少走弯路。

  一、基础代码

use std::fmt;
#[derive(Debug)]
enum myip{
ipv4(String),
ipv6(String),
}

  上述的代码就定义一个枚举呗,该对象包括两个变量,其类型都为String。

  以下内容所涉及的都与上述基础代码有关。

  二、构造并输出如上的enum枚举

  let v4=myip::ipv4(String::from("192.168.3.9"));
  let v6=myip::ipv6(String::from("::1"));

  println!("V4的内容是:  {:?}", v4);
  println!("V6的内容是:  {:?}", v6);

  //如上代码运行后,输出内容是:

  V4的内容是:  ipv4("192.168.3.9")
  V6的内容是:  ipv6("::1")

  请认真看清楚,输出的是类似ipv4("192.168.3.9")的内容,根本就不是 192.168.3.9 这样的内容,所以,你想拿它去进行各种判断或处理,难喽。并且,想要获取 192.168.3.9 这样的值,不费一点功夫,根本不可能。下面,继续为大家介绍。

  三、获取enum枚举变量的值

  要想获取值,得使用impl关键字。

  在上面的代码基础上,增加如下代码:

impl fmt::Display for myip {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match self {
           myip::ipv4(a) => write!(f, "{}", a),
           myip::ipv6(b) => write!(f, "{}", b),
        }
    }
}

  然后,再进行输出:

  println!("V4的内容是:  {}", v4);
  println!("V6的内容是:  {}", v6);

  运行上述两行代码之后,输出如下内容:

  V4的内容是:  192.168.3.9
  V6的内容是:  ::1

  怎么样,现在可以获取值了。

  下面,再拿获取的值进行各种处理,就能完成许多业务了。

  比如,拿下面的代码试试:

  if v4.to_string().contains("192.168.3"){
        println!("包含 192.168.3");//这里判断成功,可以输出
  }

  上面的if也可以这样使用:if v4.to_string() == "192.168.3".to_string()

  再比如下面的代码:

  match &v4 {
        myip::ipv4(_) =>println!("匹配的是v4 {}", v4),//本例匹配此句
        myip::ipv6(_) =>println!("匹配的是v6 {}", v6),
        _=> println!("无法匹配…"),
  }

  好了,就讲到这里吧,记得之前也是使用impl获取结构体struct的值,与此文类似,若想学习,请搜索 impl 即可。

  四、知识拓展

  想了解更多的enum,请参阅读下文。

#[derive(Debug)]
enum infor{
work,
rmb,
}


fn getinforvalue(x:infor)->i32{
match x{
infor::work => 1900,
infor::rmb => 5600,
_=> 0,
}
}

fn main() {
println!("开始了…");
let i1=getinforvalue(infor::rmb);
println!("i1 is {:?}",i1);

if i1==5600{
println!("判断相等了…");
}

let i1=getinforvalue(infor::work);
println!("i1 is {:?}",i1);

}


该杂文来自: 最新技术

上一篇:rust制作带参数并有返回值的DLL动态链接库

下一篇:rust之Vec添加多个struct后变字符串再变Value(jso

网站备案号:

网站备案号:滇ICP备11001339号-7

版权属性:

Copyright 2007-2021-forever Inc. all Rights Reserved.

联系方式:

Email:dzwebs@126.com QQ:83539231 访问统计