首页 > 其他分享 >rust 构造器和默认构造器

rust 构造器和默认构造器

时间:2023-11-04 14:46:18浏览次数:31  
标签:name person Default age 默认 Person 构造 new rust

构造器和默认构造器

Rust中,通常使用一个关联函数new来创建一个对象,通过Default trait来支持默认构造器。

// #[derive(Default)]来实现Default,而不必显式的实现。
#[derive(Default)]
pub struct Person {
    name: String,
    age: u64,
}

impl Person {
    // new 构造函数创建对象
    pub fn new(name: String, age: u64) -> Self {
        Self { name, age }
    }

    pub fn print(&self) {
        println!("name: {}", self.name);
        println!("age: {}", self.age);
    }
}

// 为Person实现Default trait
// impl Default for Person {
//     fn default() -> Self {
//         Self {
//             name: "liuzonglin".to_owned(),
//             age: 27,
//         }
//     }
// }

#[allow(unused_imports)]
pub mod person;
use person::Person;

fn main() {
    let person = Person::new("liuzonglin".to_owned(), 27);
    person.print();

    // error[E0451]: field `name` of struct `Person` is private
    // 使用 new构建函数对类型来说具有更好的封装性
    // let person = Person { name: "liuzonglin".to_string(), age: 27, };
    // person.print();

    // default 实现 分两种:
    // 1. #[derive(Default)] 来实现Default,而不必显式的实现。
    // 2. impl Default for Person {...} 为Person实现Default trait
    let person = Person::default();
    person.print();
}

标签:name,person,Default,age,默认,Person,构造,new,rust
From: https://www.cnblogs.com/liuzonglin/p/17809308.html

相关文章

  • rust 集合当成智能指针
    集合当成智能指针通过为集合实现Dereftrait,提供其拥有和借用的数据视图。Vec是一个拥有T的集合,然后通过实现Deref完成&Vec到&[T]的隐式解引用,从而提供借用T的集合(即&[T])#[stable(feature="rust1",since="1.0.0")]unsafeimpl<#[may_dangle]T,A:Allocator>Dropfor......
  • rust 指针
    指针deref()方法是将一个智能指针转换为底层数据类型的引用。fnmain(){leta=vec![1,2,3];a.iter().for_each(|f|println!("{}",f));//deref方法是将一个智能指针转换为底层数据类型的引用。letb=a.deref();b.iter().for_each(|f|printl......
  • rust 析构器中做最终处理
    析构器中做最终处理Rust中,通常在析构函数中运行退出前必须运行的代码。#[derive(Debug)]pubstructA(u8);implDropforA{fndrop(&mutself){println!("Aexit")}}#[derive(Debug)]pubstructB(u8);implDropforB{fndrop(&mutself)......
  • rust 使用 take 和 replace 来保留所有值
    使用take和replace来保留所有值枚举类型enumMyEnum{A{name:String,x:u32},B{name:String},}使用std::mem::take()和std::mem::replace()在不克隆name的情况下修改name这种方式可以不用#[derive(Clone)],不存在内存分配。#![allow(unused)......
  • rust 使用借用类型作为参数
    使用借用类型作为参数编码时应该总是倾向于使用借用类型而不是借用所有类型。对于String类型来说,应该倾向于使用使用&str,而不是&String;#[allow(unused)]fnmain(){letstring:String="hello".to_string();letborrow_string:&String=&string;letborrow......
  • rust PBFT
    PBFT(PracticalByzantineFaultTolerance)PBFT(PracticalByzantineFaultTolerance)算法是一种分布式共识算法,旨在解决拜占庭将军问题(ByzantineGeneralsProblem)。拜占庭将军问题是指在分布式系统中,由于网络故障或者节点故障等原因,导致节点之间无法达成共识或者达成错误的共识。......
  • rust Unsurprising
    Unsurprising(不意外)最少意外原则接口应尽可能直观(可预测,用户能猜对)至少应该不让人感到惊奇核心思想贴近用户已经知道的东西(不必重学概念)让接口可测试命名实践实现常用的Traits人体工程学(Ergonomic)Traits包装类型(WrapperType)命名实践接口的名称,应符......
  • rust p2p
    p2p[+]Expanddescriptionp2p简介P2P:peer-to-peer(点对点)P2P是一种网络技术,可以在不同的计算机之间共享各种计算资源,如CPU、网络带宽和存储。P2P是当今用户在线共享文件(如音乐、图像和其他数字媒体)的一种非常常用的方法。Bittorrent和Gnutella是流行的文件共享p2p......
  • rust async
    asyncSend和Sync在跨线程时需要关注Send:ownership(所有权)可以send到其他线程AtypeisSendifitissafetosendittoanotherthread.Sync:可以并发,无线程安全问题AtypeisSyncifitissafetosharebetweenthreads(TisSyncifandonlyif&T......
  • Rust 结构体的方法描述
    Rust结构体的方法描述原文地址:https://rustwiki.org/zh-CN/rust-by-example/fn/methods.htmlRust的方法(method)是依附于对象的函数。这些方法通过关键字self来访问对象中的数据和其他。方法在impl代码块中定义。静态方法(staticmethod)静态方法不需要实例来调用,把结构体......