文章目录
一句话总结:
function和methed很多都是相同的。
不同点在于:
- methed定义在结构体里面,并且它的第一个参数肯定是self,代表结构体实例。方法需要用
实例名.方法名
调用 - 当然结构体里面的函数也可以没有self关键字,该函数被称为关联函数 ,可以通过
结构体名::函数名
的方式调用。
详细介绍接用法,请看下文。
function
1、使用fn
关键字声明。
2、使用snake case(下划线)命名风格。
3、rust语言中,function只要定义了就行,不管它在调用位置前定义或者在调用位置之后。如下:
rust
fn main() {
println!("Hello, world!");
another_function();
}
fn another_function() { // 采用snake case命名风格
println!("Another function.");
}
4、statements是语句,用于执行一些指令,但是没有返回值,所以不能用于赋值。比如不能有这样的语句 x=y=6
,这是因为赋值操作是没有返回值的。
5、expression是表达式,它是有返回值的。
6、对于一个代码块,如果最后一行代码,使用分号结尾了,则表明这是一条语句,是不能作为返回值的。如果没有分号结尾则可以作为函数返回值。
rust
fn main() {
println!("Hello, world! {}", another_function(10))
}
// define after main
fn another_function(i:i32) -> i32 { // snake case style
println!("Another function.i={i}, i={}", i); // print variable
i + 1 // expression as return value
}
7、function可以使用return在函数中间返回,也可以直接在函数结束时通过expression返回。
methed
1、使用fn关键字声明。
2、第一个参数必须是self。
3、可以有和属性名一致的方法名。
4、一个结构体可以有多个impl
代码块。
Associated Functions
1、所有定义在impl
代码块里面的都叫关联函数。一个结构体可以有多个impl
代码块。
2、关联函数的参数也可以没有self,此时我们就需要用::
去调用这个方法。
rust
fn main() {
let animal = Animal::new(2, "Lion");
animal.say_hello();
}
struct Animal {
age:u32,
name:&'static str,
}
impl Animal {
// associated function
fn new(age:u32, name:&'static str) -> Self {
Animal { age, name } // expression as return value
}
// method
fn say_hello(&self) {
println!("Hello, my name is {} and I am {} years old.", self.name, self.age);
}
}