当前位置: 首页 > wzjs >正文

网站建设出错1004大一做家教的网站

网站建设出错1004,大一做家教的网站,wordpress3.6下载,广东外贸网站定制一、结构定义 struct-翻译为结构/结构体 总体上有两种定义方式:带有详细属性名的;不带属性名(元组) 从工程角度出发,并不推荐不带属性的定义方式,因为不友好。希望rust后面不要搞类似好像很友好&#xff…

一、结构定义
struct-翻译为结构/结构体

总体上有两种定义方式:带有详细属性名的;不带属性名(元组)

从工程角度出发,并不推荐不带属性的定义方式,因为不友好。希望rust后面不要搞类似好像很友好,但是其实起到干扰作用的语法。

如果再考虑到一些rust的其它问题,定义一个结构其实也不是那么容易。

示例:
struct Point{x:f64,y:f64}
struct Triangle(Point,Point,Point);

/**
 * 家庭结构体s
 */
struct Family {
    name: String,
    father: String,
    mather: String,
    children: Vec<String>,
}
/**
 * 这都什么狗屎语法。
 */
struct Book<'a> {
    name: &'a str,
    author: &'a str,
    price: f64,
    pubyear: i32,
}
fn main() {
    let mut family = Family {
        name: String::from("家"),
        father: String::from("爸爸"),
        mather: String::from("妈妈"),
        children: vec![],
    };

    family.children.push(String::from("老大-独龙"));
    family.children.push(String::from("老二-独眼"));
    family.children.push(String::from("老三-独秀"));
    family.children.push(String::from("老四-嘟嘟"));
    family.children.push(String::from("老五-杜牧"));

    //打印家庭结构体
    println!(
        "家庭:{},父亲:{},母亲:{}",
        family.name, family.father, family.mather
    );
    for child in &family.children {
        println!("孩子:{}", child);
    }
    let mut 三国演义 = Book {
        name: "三国演义",
        author: "罗贯中",
        price: 29.8,
        pubyear: 1300,
    };
    
    //各种创建结构实例的方式
    // 方式一:双点号复制
    let mut 红楼梦=Book{
        name:"红楼梦",
        author:"曹雪芹",
        ..三国演义
    };
    //方式二: 略属性名
    let 西游记=write_book("西游记","吴承恩",24.0,1525);
    //方式三:使用基于元组定义的。 比java的record还简单

    let books=[三国演义,红楼梦,西游记];
    for i in 0..books.len() {
        print_book(&books[i]);
    }
    let p1=Point{x:10.0,y:20.0};
    let p2=Point{x:20.0,y:20.0};
    let p3=Point{x:20.0,y:10.0};
    let t=Triangle(p1,p2,p3);
    print_triangle(&t);
}

fn print_book(book:&Book){
    println!(
        "书名:{},作者:{},价格:{},出版年:{}",
        book.name, book.author, book.price, book.pubyear
    );
}

fn print_triangle(t:&Triangle){
    println!("三点坐标:");
    println!("{},{}",t.0.x,t.0.y);
    println!("{},{}",t.1.x,t.1.y);
    println!("{},{}",t.2.x,t.2.y);
}

fn write_book<'a>(name:&'a str,author:&'a str,price:f64,pubyear:i32)->Book<'a>{
    Book{
        name,
        author,
        price,
        pubyear
    }
}

在上例中,结构Book使用了非常奇怪的语法:


struct Book<'a> {

    name: &'a str,

    author: &'a str,

    price: f64,

    pubyear: i32,

}

这个能够定义出来,是因为编译器提示的。

作为初学者,先绕过这个吧。 

rust结构体实例的属性赋值也有两种方式:
属性逐一赋值

双点号复制属性值
例如以下就是:
let mut 红楼梦=Book{
        name:"红楼梦",
        author:"曹雪芹",
        ..三国演义
    };

二、几种打印方式
至少有4种打印方式:

逐一访问属性名
println!使用宏符号:?
println!使用宏符号:#?
使用dbg!
后面三种方式,要求定义结构的时候,在结构前添加

#[derive(Debug)]
这个东西应该怎么称呼了? "属性"还是"编译指示符"?,有点乱七八杂的。 

从宏观上而言,很多类似的都是可以称为编译指示符,所以为了更加精准一些,我愿意称为"功能编译指示"。

通过这个功能编译指示,rust编译器会自动实现特定功能。

示例:


#[derive(Debug)]
struct Family{
    father:String,
    mather:String,
    address:String
}

fn main(){
    let mut mf=Family{
        father:String::from("lu"),
        mather:String::from("hu"),
        address:String::from("中国")
    };
    println!("我家-{},{},{}",mf.father,mf.mather,mf.address);
    print_family(&mf);
    print_family_use_dbg(&mf);
}

fn print_family(f:&Family){
    //你不能直接打印,否则会有奇奇怪怪的错误提示
    //println!("{}",f);  // 这个会提示错误,所以注释掉了

    //使用奇怪符号 :?打印结构体
    println!("我家:?-{:?}",f);

    //使用奇怪的符号,可以打印结构体 :#?
    println!("我家:#?-{:#?}",f);
}

fn print_family_use_dbg(f:&Family){
    dbg!(f);
}

三、定义结构内的函数
在没有看书本正文之前,我以为和java的record一样,在struct内部定义函数。

其实不是! 如果要为结构体定义函数,必须在结构体外。 不知道为什么要那样? 难道内部定义的话,有其它用途?

示例:
#[derive(Debug)]
struct Cube{
    length: u32,
    width: u32,
    height: u32,
}
impl Cube{
    fn volume(&self) -> u32{
        return self.length * self.width * self.height;
    }
    fn is_bigger_than(&self, other: &Cube) -> bool{
        return self.volume() > other.volume();
    }

}

fn main() {
    let cube = Cube{length: 10, width: 12, height: 25};
    let cube2 = Cube{length: 15, width: 10, height: 30};
    println!("立方体的体积={}立方厘米",cube.volume());
    let is_bigger = cube.is_bigger_than(&cube2);
    match is_bigger{
        true => println!("cube的体积{}大于cube2体积{}",cube.volume(), cube2.volume()),
        false =>println!("cube的体积{}小于cube2体积{}",cube.volume(), cube2.volume()),
    };
}

结构体的函数有几个特点:

在结构体外,使用impl xxxx {}的方式,其中xxx是结构体名称
在一个impl xxx{}结构中,可以定义多个函数
书本建议我们:函数的第一个方法总是 &self,这点和python有点类似
参数&self虽然有定义,但是调用的时候不需要显示传递,因为这是编译器实现的

四、一点小补充
4.1定义没有成员的结构
在很多OOP,允许我们定义没有成员的对象。

我们可以把struct大体当做对象。

在rust中也可以定义没有成员的结构,例如:

#[derive(Debug)]
struct NoItem; 
struct NoItem2();

let nod=NoItem{};
println!("空结构体:{:?}",nod);
 

rust允许这样做,是因为struct这个类型具有很多作用,即使它不用于存储数据,也有很多作用。具体什么作用,只能等待深入后了解。

总之在rust中,绝大部分复杂的类型,都是基于结构定义的。

4.2struct大有作用
前有言:某种程度上可以把struct视为OOP中的对象

虽然rust不是明面上的OOP,但还是吸收了很多OOP的营养。

总之,许多复杂类型都是基于结构定义的。具体不一一罗列。

五、小结
结构体无疑是一个有用的东西,它就算垃圾袋/宝物袋一样,什么都可以往里装,大大方便了工程师!

  

          关注灵活就业新业态,关注公账号:贤才宝


文章转载自:

http://GsqSq7ZB.sbjhm.cn
http://45rIL78I.sbjhm.cn
http://9vIEwynl.sbjhm.cn
http://3TKaHtuI.sbjhm.cn
http://cEZV19XG.sbjhm.cn
http://phdebEqQ.sbjhm.cn
http://Ty4le873.sbjhm.cn
http://GjBCithY.sbjhm.cn
http://EZUVqz5r.sbjhm.cn
http://AKGP58Sj.sbjhm.cn
http://ww7DvncR.sbjhm.cn
http://WZ2fCBaF.sbjhm.cn
http://WwkIrsJW.sbjhm.cn
http://De8OMrtv.sbjhm.cn
http://Q7lYiTBn.sbjhm.cn
http://W6HHlyTo.sbjhm.cn
http://KgUjs9iu.sbjhm.cn
http://SIonKhcc.sbjhm.cn
http://uWC4f9FW.sbjhm.cn
http://fOineIQn.sbjhm.cn
http://dz5ieaCS.sbjhm.cn
http://MzNSnNnl.sbjhm.cn
http://KYxBsLCF.sbjhm.cn
http://Q5jxm4nP.sbjhm.cn
http://itndYkSB.sbjhm.cn
http://m7WJu54P.sbjhm.cn
http://CzoI0Seq.sbjhm.cn
http://j1cnCEAm.sbjhm.cn
http://mSVywlvU.sbjhm.cn
http://6Dz0e1v7.sbjhm.cn
http://www.dtcms.com/wzjs/742352.html

相关文章:

  • 福州企业网站php做的商城网站必备功能
  • 做免费导航网站搜索引擎营销的原理
  • crm管理系统在线使用如何做谷歌优化
  • 网上商城排行优化网站的公司
  • 网站开发哪便宜杭州网络推广专员
  • 六盘水网站开发做签名的网站
  • 汕头设计网站建设wordpress php最大输出变量
  • wordpress仿站教程网新品发布会视频
  • 网站用的服务器高级网站开发工程师证
  • 网站建设什么是静态网页加快wordpress
  • 企业网站推广的一般策略wordpress手机菜单分行
  • 免费做英文网站网站空间搭建
  • 手机怎么样自己做网站长沙做网站seo
  • 西安企业网站苏州网站建设品牌公司
  • 钟星建设集团网站邹平网站建设公司报价
  • 深圳个人网站建设文化传媒网站建设
  • 开发建设网站优秀网站制作定制
  • 自己怎么做云购网站陕西一建2022停考
  • 漳州市城乡住房建设局网站软件外包公司名单
  • 织梦素材网站模板免费下载网站建设而
  • wordpress 主题2周前石家庄seo网站优化价格
  • 秦皇岛网站群发关键词苏州网页模板建站
  • 网站建设费用 知乎网站地图的重要性
  • 网站建设7个主要流程图网站建设 荆州
  • 专业北京网站建设公司上海门户网站怎么登录
  • 中石化第五建设有限公司官方网站建设网站设计
  • 长沙建站做企业网站公司广告网站定制
  • 长沙网站制作工作室网站资源做缓存
  • 张家口网站建设费用做网站导航的
  • 修改网站域名网站开发任务单百度文库