rust
中没有 class
,rust
中的 struct
和其他语言中的 class
类似,接下来写写例子看看怎么使用。
rust
中的struct
不能继承
定义一个 struct
// 定义一个结构体
struct Point {
x: f64,
y: f64,
}
fn main() {
// 定义一个 Point 对象,并初始化,初始化语法用 {}
let p1 = Point {x: 10.2, y: 23.8};
// 获取结构体中的内容用 .
println!("x: {}, y: {}", p1.x, p1.y);
}
输出:x: 10.2, y: 23.8
给 struct 实现方法
rust
中也有类似其他语言中的类方法和实例方法,类方法就是属于类的,通过类名访问,实例方法通过实例访问。
实例方法
struct Point {
x: f64,
y: f64,
}
impl Point {
// print 是Point 的实例方法,第一个参数代表实例自身,&代表引用
fn print(&self) {
println!("x: {}, y: {}", self.x, self.x);
}
}
fn main() {
let p1 = Point {x: 10.2, y: 23.8};
// println!("x: {}, y: {}", p1.x, p1.y);
p1.print();
}
关联函数
rust
中的类方法叫做关联函数。
struct Point {
x: f64,
y: f64,
}
impl Point {
fn print(&self) {
println!("x: {}, y: {}", self.x, self.x);
}
// info 是一个关联函数
fn info(p: Point) {
println!("x: {}, y: {}", p.x, p.x);
}
}
fn main() {
let p1 = Point {x: 10.2, y: 23.8};
Point::info(p1); // 使用关联函数
}
struct 不能继承
rust
中的 struct
不能继承,但是 rust
有 Trait
,就是和其他语言中的接口(interfaces
)类似的功能。
定义一个 Trait
trait
中的函数的第一个参数代表要实现该 trait
对象的实例。
pub trait Summary {
fn summarize(&self) -> String;
}
对某个类型实现 trait
的语法为:
impl Trait名字 for 具体类型 {}
为 Point
结构实现 Summary
:
impl Summary for Point {
fn summarize(&self) -> String {
format!("----- Point Object Summary -----\nx: {0}, y: {1}", self.x, self.y)
}
}
以上就是 rust
中的 struct
的基本使用,还有更多高级的使用方法,如:泛型、多trait、结构体作为函数参数、Trait作为参数等。