码迷,mamicode.com
首页 > 其他好文 > 详细

implement a list using Rust

时间:2019-09-04 15:09:46      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:main   use   pil   for   用法   imp   rap   pytho   int()   

Rust果然比較複雜,在經歷了n次compile fail,終于寫成了一個 list

難點: 對Rc<>的用法不熟悉。對borrow checker不夠熟悉

有些寫法可能還不是最短的

 

use std::rc::Rc;

fn main() {
    println!("Hello, world!");

    let li = ListInternal {
        data: 1,
        next: None,
    };
    let li = ListInternal {
        data: 2,
        next: Some(Rc::new(li)),
    };

    let mut l = List { next: Some(li) };

    for i in 1..10{
        l.push_back(i);
    }
    
    l.print();
}

struct ListInternal {
    data: i32,
    next: Option<Rc<ListInternal>>,
}

struct List {
    next: Option<ListInternal>,
}

impl ListInternal {
    fn print(&self) {
        println!("{}", self.data);

        if let Some(ref v) = self.next {
            v.print();
        }
    }

    fn print_loop(&self) {
        let mut t = self;
        loop {
            println!("{}", t.data);

            if let Some(ref v) = t.next {
                t = v;
            } else {
                break;
            }
        }
    }

    fn last(&mut self) -> &mut Self {
        let mut t = self;
        loop {
            if let Some(ref mut v) = t.next {
                t = Rc::get_mut(v).unwrap();
            } else {
                break;
            }
        }
        t
    }
}
impl List {
    fn new() -> List {
        List { next: None }
    }

    fn print(&self) {
        if let Some(ref v) = self.next {
            v.print_loop();
        }
    }
    fn push_back(&mut self, data: i32) {
        let li = ListInternal {
            data: data,
            next: None,
        };

        if let Some(ref mut v) = self.next {
            v.last().next = Some(Rc::new(li));
        } else {
            self.next = Some(li);
        }
    }
}

 

implement a list using Rust

标签:main   use   pil   for   用法   imp   rap   pytho   int()   

原文地址:https://www.cnblogs.com/cutepig/p/11459177.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!