Rust中的结构体及方法语法

这个可以和类作比较,或是go当中的方法比较。

#[derive(Debug)]
struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn area(&self) -> u32 {
	self.width * self.height
    }

    fn square(size: u32) -> Rectangle {
	Rectangle {width: size, height: size}
    }
}

impl Rectangle {
    fn can_hold(&self, other: &Rectangle) -> bool {
	self.width > other.width && self.height > other.height
    }
}

fn main() {
    let rect1 = Rectangle { width: 30, height: 50};
    let rect2 = Rectangle { width: 10, height: 40};
    let rect3 = Rectangle { width: 60, height: 45};

    println!("Can rect1 hold rect2? {}", rect1.can_hold(&rect2));
    println!("Can rect1 hold rect3? {}", rect1.can_hold(&rect3));
    println!("rect1 is {:#?}", rect1);
    println!(
	"The area of retangle is {} square pixels", rect1.area()
    );
    println!(
        "The area of retangle is {} square pixels", area(&rect1)
    );

    let sq = Rectangle::square(5);

    println!("square is {:#?}", sq);
    println!("The area of Square is {} square pixels", sq.area());
}

fn area(rectangle: &Rectangle) -> u32 {
    rectangle.width * rectangle.height
}

  

原文地址:https://www.cnblogs.com/aguncn/p/11403541.html

时间: 2024-11-08 11:57:09

Rust中的结构体及方法语法的相关文章

[转]C#中的结构体与类的区别

C#中的结构体与类的区别 经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字struct.在语法上其实类和结构有着很多相似的地方. 定义类的语法 1 class Person 2 { 3 private string name; 4 private int age; 5 6 public void SayHi() 7 { 8 Console.WriteL

Swift中的结构体,类,协议,扩展和闭包的用法以及? 和 !的区别

// MARK: - 1.结构体 //1.声明一个结构体 struct Rect {    // 声明结构体变量的属性(存储属性)    var x:Float    var y:Float    var width:Float    var height:Float    // 声明结构体属性,要使用static    static var description:String?        // 声明一个计算属性(是用来专门计算结构体变量属性的setter,和getter方法,其本身没有存

C语言中的结构体,结构体数组

C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存对齐的问题.也就是内存里面会有空档. 1.结构体的定义和赋值 结构体是可以直接初始化的,在定义的时候,就可以初始化,而且如果你的结构体中恰好有字符数组的话,这个时候初始化是不错的选择,原因很简单,字符数组只能定义的时候直接初始化 后来就不可以了,后来你就只能用strcpy函数来拷贝初始化了. str

黑马程序员-------oc中的结构体

oc中的结构体主要有CGPoint,CGSize,CGRect,NSRange; /* Points. */ struct CGPoint { CGFloat x; CGFloat y; }; typedef struct CGPoint CGPoint; /* Sizes. */ struct CGSize { CGFloat width; CGFloat height; }; /* Rectangles. */ struct CGRect { CGPoint origin; CGSize s

浅析C#中的结构体和类

类和结构是 .NET Framework 中的常规类型系统的两种基本构造. 两者在本质上都属于数据结构.封装着一组总体作为一个逻辑单位的数据和行为. 数据和行为是该类或结构的"成员",它们包括各自的方法.属性和事件等 对于C/C++程序员来说.结构体和类的差别非常小.仅仅是结构体的默认成员变量为public,类的默认成员变量为private. 可是对于C#来说,结构体和类有非常多的不同. 首先来谈一谈为何须要结构体: 最主要的原因就是结构体有能力去管理.使用不同数据类型的组合. .NE

关于物体 '固有类别' 与 '实际使用类别' 分离的情况,结构体定义方法

在面向接口.面向对象编程的过程中,会遇到实际物体类别与定义类别相分离的情况. 例如,我们有三种物体,他们的固有类别分别为: TYPEA,TYPEB,TYPEC.在我们实际使用过程中,我们会根据不同的情况将他们分成 2 组: Group1,Group2. 那么,我们在定义结构体和物理类别时,需要注意对 Group 进行定义.定义物体具体属性和结构体如下: #define TYPEA (0x01UL << 0) #define TYPEB (0x01UL << 1) #define T

x264中重要结构体参数解释,参数设置,函数说明 &lt;转&gt;

x264中重要结构体参数解释http://www.usr.cc/thread-51995-1-3.htmlx264参数设置http://www.usr.cc/thread-51996-1-3.html x264中重要结构体参数解释typedef struct x264_param_t{/* CPU 标志位 */unsigned int cpu;int         i_threads;       /* 并行编码多帧 */int         b_deterministic; /*是否允许非

C++中的结构体,C管理进程代码,C++管理进程代码,C语言中的联合体

 1.C++中的结构体 #include<iostream> struct lstruct { int num; }; struct MyStruct { int num; double db = 10.8;//可以有默认的值 //MyStruct sx;//拒绝内部定义自己,也就是说不能够内部指向自己 MyStruct *pnext; MyStruct *phead; lstruct  l1; void boss()  //可以有方法 { } }; struct MyStructA {

go结构体与方法

go结构体相当于python中类的概念 结构体用来定义复杂的数据结构,存储很多相同的字段属性 1.结构体的定义以及简单实用 package main import ( "fmt" ) func main() { type Student struct { //定义结构体 name string age int } s1 := new(Student) // 定义指向结构体的指针 s1.name = "xiaomu" s1.age = 10 fmt.Printf(&q