Rust(6) - Structure
1. 宣告 Structure:
Structure 可以有意義地集合資料,跟 tuple 或 array 比起來有較高的可讀性。
fn main() { let rect = Rectangle { x: 0.0, y: 0.0, w: 1.0, h: 3.0, }; println!("x: {}, y: {}, w: {}, h: {}", rect.x, rect.y, rect.w, rect.h); } struct Rectangle { x: f32, y: f32, w: f32, h: f32, }
用 tuple 也可以達成類似的功能並收集不同型別的資料,但不具可讀性。
let rect: (f32, f32, f32, f32) = (0.0, 0.0, 1.0, 3.0);
2. 幫 Structure 添加 function:
透過 impl 我們可以幫 Structure 添加專屬方法,&self 是一個自引用代表物件本身。
fn main() { let rect = Rectangle { x: 0.0, y: 0.0, w: 1.0, h: 3.0, }; println!("Area: {}", rect.area()); rect.center(); } #[derive(Debug)] struct Rectangle { x: f32, y: f32, w: f32, h: f32, } impl Rectangle { fn area(&self) -> f32 { self.w * self.h } fn center(&self) { println!("Center is {}, {}", self.x, self.y); } }
impl 中的方法可以分開,舉個例子。
impl Rectangle { fn area(&self) -> f32 { self.w * self.h } } impl Rectangle { fn center(&self) { println!("Center is {}, {}", self.x, self.y); } }
Structure in Go:
附上 Go 的 struct,感覺 Go 跟 Rust 是兩兄弟寫法幾乎一樣XD
package main import "fmt" func main() { rect := Rectangle{ 0, 0, 1, 3, } fmt.Printf("Area: %.3f\n", rect.Area()) fmt.Printf("Center is %.3f, %.3f\n", rect.x, rect.y) } type Rectangle struct { x float32 y float32 w float32 h float32 } func (rect *Rectangle) Area() float32 { return rect.w * rect.h } func (rect *Rectangle) Center() (float32, float32) { return rect.x, rect.y }
留言
張貼留言