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的更多相关文章

  1. 转 A Week with Mozilla's Rust

    转自http://relistan.com/a-week-with-mozilla-rust/ A Week with Mozilla's Rust I want another systems la ...

  2. Rust 学习 0

    安装Rust 后,本地有文档: file:///usr/local/share/doc/rust/html/index.html file:///usr/local/share/doc/rust/ht ...

  3. 2.4 Rust Ownership

    What Is Ownership ownership这个单词有些不好翻译,刚开始就直接叫它“ownership”即可.这里简单说一下,我对它的理解, 从“数据结构与算法”的角度来看,ownershi ...

  4. Rust 内存管理

    Rust 内存管理 Rust 与其他编程语言相比,最大的亮点就是引入了一套在编译期间,通过静态分析的方式,确定所有对象的作用域与生命周期,从而可以精确的在某个对象不再被使用时,将其销毁,并且不引入任何 ...

  5. 5分钟APIG实战: 使用Rust语言快速构建API能力开放

    序言:Rust语言简介 参与过C/C++大型项目的同学可能都经历过因为Null Pointer.Memory Leak等问题“被” 加班了不知道多少个晚上.别沮丧,你不是一个人,Mozilla Fir ...

  6. Rust到底值不值得学--Rust对比、特色和理念

    前言 其实我一直弄不明白一点,那就是计算机技术的发展,是让这个世界变得简单了,还是变得更复杂了. 当然这只是一个玩笑,可别把这个问题当真. 然而对于IT从业者来说,这可不是一个玩笑.几乎每一次的技术发 ...

  7. Rust学习笔记1

    这是一份不错的rust教程,目前包括4个block和4个project.全部完成后可以用rust实现一个简单的key-value存储引擎. 注意:Windows下rust貌似会遇到一些bug,强烈建议 ...

  8. 通过欧拉计划学Rust编程(第54题)

    由于研究Libra等数字货币编程技术的需要,学习了一段时间的Rust编程,一不小心刷题上瘾. 刷完欧拉计划中的63道基础题,能学会Rust编程吗? "欧拉计划"的网址: https ...

  9. 3.5 Rust Generic Types, Traits, and Lifetimes

    Every programming language has tools for effectively handling the duplication of concepts. In Rust, ...

随机推荐

  1. Python学习日记(三十五) Mysql数据库篇 三

    使用Navicate 创建一个连接去使用Mysql的数据库,连接名可以取任意字符但是要有意义 新增一个数据库 填写新数据库名,设置它的字符集和排序规则 新建一个表 增加表中的信息 点击保存再去输入表名 ...

  2. C:\Program Files\Docker\Docker\Resources\bin\docker.exe: no matching manifest for windows/amd64 10.0.17763 in the manifest list entries.

    右击t图标→Settings 修改红框为True,应用修改即可

  3. UART 串口示例代码

    /* uart_tx.c */ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #i ...

  4. Andrew Ng机器学习 一: Linear Regression

    一:单变量线性回归(Linear regression with one variable) 背景:在某城市开办饭馆,我们有这样的数据集ex1data1.txt,第一列代表某个城市的人口,第二列代表在 ...

  5. 洛谷 P2722 总分题解

    题目描述 我们可以从几个种类中选取竞赛的题目,这里的一个"种类"是指一个竞赛题目的集合,解决集合中的题目需要相同多的时间并且能得到相同的分数.你的任务是写一个程序来告诉USACO的 ...

  6. NodeJS 多版本管理(NVM)

    前言 现在前端各种框架更新较快,对 Node 的依赖也不一样,Node 的过版本管理也很有必要. NVM(Node Version Manager),是一个 Node 的版本管理工具. 官方的 NVM ...

  7. 11.vue-router编程式导航

    页面导航的两种方式 声明式导航:通过点击链接实现导航的方式,叫做声明式导航 例如:普通网页中的链接或vue中的 编程式导航:通过调用JavaScrip形式的API实现导航的方式,叫做编程式导航 例如: ...

  8. vue 弹框

    弹框展示: 代码: <template> <div> <el-col :span="9" style="text-align: right; ...

  9. 浏览器-同源政策(same-origin policy)

    浏览器安全的基石是“同源政策”(same-origin policy). 1995年,同源政策由 Netscape 公司引入浏览器.目前,所有浏览器都实行这个政策. 何为同源? 协议相同 域名相同 端 ...

  10. LINUX部署JAVA项目

    Tomcat 应用服务器搭建好 安装 tomcat 所需依赖或工具软件 sudo yum -y update sudo yum -y install wget java unzip 使用 wget 下 ...