1、self和Self
在Rust中,self
和 Self
有不同的含義和用法,它們通常出現在結構體、枚舉或實現(impl
)塊的上下文中。
-
self
:self
是一個關鍵字,它代表方法調用時實例本身的引用
。當在一個方法定義中使用self
作為第一個參數時,它表示該方法是通過某個特定類型的實例調用來觸發的。self
可以帶有不同的借用修飾符:&self
:借用實例的一個不可變引用。&mut self
:借用實例的一個可變引用。self
(沒有借用符號):這意味著方法將獲取實例的所有權,并且可能會消耗這個實例(例如,在析構函數中或者當需要轉移所有權時)。
-
Self
:Self
是一個類型占位符,代表當前實現塊(impl
)所針對的具體類型。當你不想明確寫出類型名稱時,可以使用Self
來代替。- 這個關鍵字通常用于返回值類型或者是泛型上下文中,當你希望指代具體的類型但又不想重復寫類型名的時候。
struct Point {x: f64,y: f64,
}impl Point {// 構造函數,返回 Self 類型的新實例fn new(x: f64, y: f64) -> Self {Point { x, y }}// 方法,接收不可變引用 selffn distance_from_origin(&self) -> f64 {(self.x.powi(2) + self.y.powi(2)).sqrt()}// 方法,接收可變引用 selffn move_by(&mut self, dx: f64, dy: f64) {self.x += dx;self.y += dy;}// 方法,接收所有權 selffn into_polar(self) -> (f64, f64) {let r = (self.x.powi(2) + self.y.powi(2)).sqrt();let theta = (self.y / self.x).atan();(r, theta)}
}