Rust語言學習筆記(3)

2021-07-11 22:15:29 字數 2832 閱讀 4207

// 泛型列舉(generic enums)

enum option

let x: option= some(5);

let y: option= some(5.0f64);

enum result

// 泛型函式(generic functions)

fn takes_anything(x: t)

fn takes_two_of_the_same_things(x: t, y: t)

fn takes_two_things(x: t, y: u)

// 泛型結構體(generic structs)

struct point

let int_origin = point ;

let float_origin = point ;

implpoint

}

// 特質

trait hasarea

struct circle

// 在結構體中實現特質

impl hasarea for circle

}// 為其他型別實現特質

trait hasarea

impl hasarea for i32

}5.area();

// 特質的預設方法

trait foo

}struct usedefault;

impl foo for usedefault

}struct overridedefault;

impl foo for overridedefault

fn is_invalid(&self) -> bool

}let default = usedefault;

assert!(!default.is_invalid()); // prints "called usedefault.is_valid."

let over = overridedefault;

assert!(over.is_invalid()); // prints "called overridedefault.is_invalid!"

// 特質的繼承(inheritance)

trait foo

trait foobar : foo

struct baz;

impl foo for baz

}impl foobar for baz

}// deriving

#[derive(debug)]

struct foo;

fn main() ", foo);

}

// 特質的應用

trait hasarea

struct circle

impl hasarea for circle

}struct square

impl hasarea for square

}// 泛型函式的特質邊界,靜多型

fn print_area_static(shape: &t) ", shape.area());

}// 特質物件,動多型

fn print_area_dynamic(shape: &hasarea) ", shape.area());

}fn main() ;

let s = square ;

print_area_static(&c); // this shape has an area of 3.141592653589793

print_area_static(&s); // this shape has an area of 1

print_area_dynamic(&c); // this shape has an area of 3.141592653589793

print_area_dynamic(&s); // this shape has an area of 1

}

// 泛型結構體的特質邊界

struct rectangle

implrectangle

}fn main() ;

assert!(r.is_square());

r.height = 42;

assert!(!r.is_square());

}

// 多重特質邊界

fn foo(x: t)

use std::fmt::debug;

fn foo(x: t) ", x);

}// where子句

use std::fmt::debug;

fn foo(x: t, y: k) ", y);

}fn bar(x: t, y: k) where t: clone, k: clone + debug ", y);

}fn main()

// 實現drop特質

struct firework

impl drop for firework !!!", self.strength);

}}fn main() ;

let tnt = firework ;

}// boom times 100!!!

// boom times 1!!!

// 通用函式呼叫語法

trait foo

struct bar;

impl bar

}impl foo for bar

}fn main()

Rust 語言學習筆記(四) I O

寫在前面 這是一篇近一年前的草稿了,翻出來發現,關於task 已改名為thread 退出的一些做法仍然適用,而且 zmq.rs 0.2 不出意外也要用到,所以仍然把這篇寫完貼出來備查。但請注意,文中關於libgreen的一些描述已不屬實。這一篇隔的時間比較長,期間我們的遊戲在準備上線,所以也沒時間寫...

C語言學習筆記(3)

edited by silence獨家 命名規範 1 識別符號的命名要清晰,明了,有明確含義,同時使用完整的單詞或大家基本可以理解的縮寫,避免使人產生誤會 2 除了常見的通用縮寫以外,不使用單詞縮寫,不得使用漢語拼音 3 產品 專案組內部應保持統一的命名風格 4 用正確的反義詞組命名具有互斥意義的變...

C語言學習筆記3

指標 為什麼需要指標?使用指標處理陣列中儲存的資料,執行速度要比使用 下標 快很多。指標可以做到更改函式呼叫處之前的區域性變數 指標 乙個變數的位址為該變數的 指標 十個常量 指標變數 指標變數是乙個變數,用於儲存位址的值 指標變數的宣告 資料型別 指標變數名 int i 10 int p1 可以將...