// 泛型列舉(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 可以將...