1、創建文件夾learn_oo1,創建Cargo.toml:
mkdir learn_oo1
cd learn_oo1
nano Cargo.toml
2、編輯Cargo.toml,文件內容如下:
[workspace]
members = ["getaver", "main"]
3、創建主程序main和庫getaver:
cargo new main
cargo new getaver --lib
4、編輯getaver/src/lib.rs,文件內容如下:
pub struct AverCollect {
list: Vec<i32>,
aver: f64,
}
impl AverCollect {
pub fn new() -> AverCollect {
AverCollect {
list: vec![],
aver: 0.0,
}
}
pub fn add(&mut self, value: i32) {
self.list.push(value);
self.update_average();
}
pub fn remove(&mut self) -> Option<i32> {
let result = self.list.pop();
match result {
Some(value) => {
self.update_average();
Some(value)
}
None => None,
}
}
pub fn average(&self) -> f64 {
self.aver
}
fn update_average(&mut self) {
let total: i32 = self.list.iter().sum();
self.aver = total as f64 / self.list.len() as f64;
}
}
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
}
5、編輯main/Cargo.toml,在[dependencies]下面添加一行:
getaver = {path = "../getaver"}
6、編輯main/src/main.rs,文件內容如下:
use getaver;
fn main() {
let mut a = getaver::AverCollect::new();
a.add(1);
println!("average = {}", a.average());
a.add(2);
println!("average = {}", a.average());
a.add(3);
println!("average = {}", a.average());
a.remove();
println!("average = {}", a.average());
}
Rust裏面沒有繼承的概念,可以通過tait來進行行爲共享:
trait A {
fn sum() {
// todo
}
}
struct XXX {}
impl A for XXX {}
本節全部源代碼:
https://github.com/anonymousGiga/learn_rust/tree/master/learn_oo1