struct 类似 schema。 ts的interface 和type
- struct MyStruct {
- width: i32,
- height: i32,
- }
创建实例
- let eg1 = MyStruct {
- width: 23,
- height: 22,
- };
struct 可以有自己的方法,并且默认第一个参数是该实例
- impl MyStruct {
- fn can_hold(&self, instance: &MyStruct) -> bool {
- self.width * self.height > instance.width * instance.height
- }
- }
&self 是 self:&Self 的缩写。在一个impl块中,Self类型是impl块的别名,方法的第一个参数必须有一个名为 self的Self类型的参数。可以缩写为self,跟函数一样也有所有权机制。如果不是self会报错:
found the following associated functions; to be used as methods, functions must have a `self` param
struct 关联函数:
- impl MyStruct {
- fn ass(a: i32) -> Self {
- Self {
- width: a,
- height: 44,
- }
- }
- }
第一个参数可以不为self,返回一个 Self实例。调用的时候跟实例方法不同。
- eg1.can_hold(&eg3) //方法
- MyStruct::ass(55) // 关联函数
关联函数的目的是返回一个 结构体实例。可以理解为一个构造函数,使用结构体 和 :: 语法 来调用这个函数,这个函数位于结构体的命名空间中,:: 用于关联函数 和 结构体的命名空间。
另外:
方法可以重载 .....