前言:
此时姐妹们对“结构体的使用方法有哪些”大概比较关注,大家都需要学习一些“结构体的使用方法有哪些”的相关内容。那么小编同时在网络上搜集了一些关于“结构体的使用方法有哪些””的相关文章,希望兄弟们能喜欢,姐妹们快快来学习一下吧!如果使用结构体表示矩形,并计算它的面积,可能会这么写:
如果新增圆形,为了计算圆形面积,函数名可能会写成 circle_area()。随着形状的增加,计算面积的函数名也在不断增加,这不够优雅。
此时,我们可以通过方法来优雅的解决这个问题。
一、定义方法
方法(methods)和函数(functions)很像,都使用 fn 关键字定义,都有自己的名字,都可以有输入参数和返回值。但和普通函数不同,方法需要在结构体(或者枚举、特征对象)上下文中定义,并且它们的第一个参数永远是 self,代表调用方法的当前实例。
方法参数 &self 是 self: &Self 的简写形式。Self 是一种类型别名,表示当前上下文的类型。使用 &self 表示当前方法使用了不可变引用,不会转移所有权,也不会修改原始值。如果方法需要修改原始值,需要使用可变引用 &mut self。
结构体的方法可以和字段同名。Rust 编译器通过尾部是否带圆括号,判断它是字段还是方法。比如 rect1.width 是字段,rect1.width() 是方法。
二、多参数方法
如果要给方法传递参数,把它放在 &self 之后即可。
三、关联函数
关联函数(associated functions)指的是在 impl 块中定义的函数,因为它们和 impl 后的类型相关联。如果关联函数的第一个参数不是 self,那么它就不是方法,因为它不依附于任何实例。之前见过的 String::from() 就是这样一种关联函数。
按照惯例,通常使用 new() 函数当作构造函数(constructor)。但是,new 本身并没有什么特权,甚至不是关键字,它只是个芸芸众生的普通函数名。除了它,你可以选用任意函数名。
在 Rust 中,关联函数、构造函数和方法的三者关系如下所示:
举个例子,在矩形结构体中,定义 square 关联函数,可以创建一个正方形。调用关联函数时,需要使用结构体名和 :: 符号。
四、多个 impl 块
impl 块的数量可以有多个,上不封顶。把一个 impl 块拆成多个,语法上没有任何问题。
五、输出结构体信息
如果你尝试在 println! 宏中直接输出结构体信息,会发现并不如意。
根据报错原因,我们看到,结构体需要实现 std::fmt::Display 特征,才能在 println! 宏中实现自定义打印。
实现 Display 特征比较麻烦,因为会涉及一些目前尚未接触的概念。一个更简单的方法是继承 Debug 特征。操作方法是在结构体上方增加 #[derive(Debug)] 确定继承关系,然后在 println! 宏中使用 {:?} 占位符打印输出。
参考资料An Example Program Using Structs, Method Syntax,
完
标签: #结构体的使用方法有哪些