Struct 入门和基本写法
首先看个简单的代码
let my_name = "无解";
let my_age = 19;
// 是否有像java和php那样的class实体类来统一描述呢
Ruet
和go
一样都是struct
定义和使用
struct User {
name: String,
age: u8,
}
fn main() {
let me = User{
name: String::from("无解"),
age: 19
};
println!("{} {}", me.name, me.age);
}
危险
这里还没有实现Debug
和Display
方法,所以不能打印me
这个实体。
定义结构体的方法
#[derive(Debug)]
struct User {
name: String,
age: u8,
}
// impl 是一个关键字
impl User {
fn version(&self) {
println!("1.0");
}
fn to_string(&self)->String {
format!("我的名字是: {}, 我的年龄是: {}", &self.name, &self.age)
}
}
fn main() {
let me = User{
name: String::from("无解"),
age: 19
};
me.version();
println!("{:#?}", me);
}
这里有一个#[derive(Debug)]
这个是rust
里的一个注解类似的东西,会自动给你注入一个Debug
的方法,然后下面就可以打印me
实体了,这里加上了一个{:#?}
能够更好看的输出内容
1.0
User {
name: "无解",
age: 19,
}
这个定义和
python
有点像都是self
注意
fn to_string(&self)->String {
format!("我的名字是: {}, 我的年龄是: {}", &self.name, &self.age)
}
这里不能加上分号,表达式是返回值的东西,如果你加上一个分号,就会压制这个表达式的结果。
即如果以不带分号的表达式结束函数,则会返回最后一个表达式的结果。
let a = {
let inner = 2;
inner * inner
};
这里表达式inner * inner
不以分号结束,所以不被抑制它的值,由于它是最后一个表达式,所以它的值将会返回并分配给a