走进Rust:结构体方法
Rust 大约 1116 字方法语法
方法与函数相似:它们使用fn
关键字及其名称进行声明,可以具有参数和返回值,并且包含一些在其他地方调用时运行的代码。但是,方法与函数的不同之处在于,它们是在结构体的上下文中定义的(或者是在enum
或trait
对象,分别在第6和17章中介绍),并且它们的第一个参数始终是self
,它代表调用该方法的结构体实例。
定义方法
impl
实现结构体,定义方法,方法的入参第一个参数必须是self
(一般传递实例的引用&self
,不然会被所有权drop
导致后续代码无法使用该实例)。
#[derive(Debug)]
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
fn area(&self) -> u32 {
self.width * self.height
}
}
fn main() {
let rect1 = Rectangle { width: 30, height: 50 };
println!(
"The area of the rectangle is {} square pixels.",
rect1.area()
);
}
相关函数
impl
实现结构体中,如果该函数的入参没有该结构体的实例,则该函数不能称为方法。一般这样的函数是用来初始化该结构体的实例。如String::from
。
impl Rectangle {
fn square(size: u32) -> Rectangle {
Rectangle { width: size, height: size }
}
}
多个impl块
impl
可以用来实现多次结构体,但定义的方法或函数不能同名,否则编译器会报duplicate definitions with name ...
错误。
impl Rectangle {
fn area(&self) -> u32 {
self.width * self.height
}
}
impl Rectangle {
fn can_hold(&self, other: &Rectangle) -> bool {
self.width > other.width && self.height > other.height
}
}
阅读 326 · 发布于 2020-07-10
————        END        ————
扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Android ListView条目上有CheckBox抢焦点的处理办法阅读 500
-
Mac通过ssh连接远程服务器阅读 1178
-
MySQL存储ip地址阅读 582
-
Nginx配置之开启状态检查阅读 611
-
Linux中使用curl代替telnet测试端口是否连通阅读 2141
-
Android ContentProvider提供Assets目录下的图片或文件阅读 569
-
微信小程序基于wxParse实现代码高亮阅读 1349
-
软考-系统架构设计师:供应链管理(SCM)阅读 878
-
Spring Boot NoClassDefFoundError: com/mongodb/connection/DefaultClusterFactory阅读 572
-
走进Rust:所有权阅读 334