定义区别
- 关联函数:在Rust中,关联函数是定义在结构体、枚举或trait内部的函数。使用
impl
块来定义,通过::
语法调用。对于结构体和枚举,关联函数使用impl
关键字定义在结构体或枚举的实现块中。例如:
struct Point {
x: i32,
y: i32,
}
impl Point {
// 关联函数
fn new(x: i32, y: i32) -> Point {
Point { x, y }
}
}
- 普通函数:普通函数在模块的顶层定义,不与特定的结构体、枚举或trait绑定。例如:
fn add(a: i32, b: i32) -> i32 {
a + b
}
调用方式区别
- 关联函数:通过结构体或枚举类型名加
::
来调用。例如上面Point
结构体的new
关联函数调用方式为:
let p = Point::new(1, 2);
- 普通函数:直接使用函数名调用,前提是函数在当前作用域内可见。例如:
let result = add(3, 4);
作用域区别
- 关联函数:作用域限定在其所属的结构体、枚举或trait的实现块内。其作用主要是为特定类型提供相关的操作,与类型紧密关联。例如
Point::new
函数主要为Point
结构体提供创建实例的操作。
- 普通函数:作用域由其所在的模块决定。如果在一个模块中定义,在该模块及通过
use
引入该函数的其他模块中可见,具有更广泛的作用域,不依赖于特定类型。例如add
函数在其定义模块及引入它的模块中可使用。