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) // 关联函数
关联函数的目的是返回一个 结构体实例。可以理解为一个构造函数,使用结构体 和 :: 语法 来调用这个函数,这个函数位于结构体的命名空间中,:: 用于关联函数 和 结构体的命名空间。
另外:
方法可以重载 .....