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