跳到主要内容

Struct 入门和基本写法

首先看个简单的代码

let my_name = "无解";
let my_age = 19;

// 是否有像java和php那样的class实体类来统一描述呢

Ruetgo一样都是struct

定义和使用

struct User {
name: String,
age: u8,
}

fn main() {
let me = User{
name: String::from("无解"),
age: 19
};
println!("{} {}", me.name, me.age);
}
危险

这里还没有实现DebugDisplay方法,所以不能打印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