implement a list using Rust
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的更多相关文章
- 转 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 ...
- Rust 学习 0
安装Rust 后,本地有文档: file:///usr/local/share/doc/rust/html/index.html file:///usr/local/share/doc/rust/ht ...
- 2.4 Rust Ownership
What Is Ownership ownership这个单词有些不好翻译,刚开始就直接叫它“ownership”即可.这里简单说一下,我对它的理解, 从“数据结构与算法”的角度来看,ownershi ...
- Rust 内存管理
Rust 内存管理 Rust 与其他编程语言相比,最大的亮点就是引入了一套在编译期间,通过静态分析的方式,确定所有对象的作用域与生命周期,从而可以精确的在某个对象不再被使用时,将其销毁,并且不引入任何 ...
- 5分钟APIG实战: 使用Rust语言快速构建API能力开放
序言:Rust语言简介 参与过C/C++大型项目的同学可能都经历过因为Null Pointer.Memory Leak等问题“被” 加班了不知道多少个晚上.别沮丧,你不是一个人,Mozilla Fir ...
- Rust到底值不值得学--Rust对比、特色和理念
前言 其实我一直弄不明白一点,那就是计算机技术的发展,是让这个世界变得简单了,还是变得更复杂了. 当然这只是一个玩笑,可别把这个问题当真. 然而对于IT从业者来说,这可不是一个玩笑.几乎每一次的技术发 ...
- Rust学习笔记1
这是一份不错的rust教程,目前包括4个block和4个project.全部完成后可以用rust实现一个简单的key-value存储引擎. 注意:Windows下rust貌似会遇到一些bug,强烈建议 ...
- 通过欧拉计划学Rust编程(第54题)
由于研究Libra等数字货币编程技术的需要,学习了一段时间的Rust编程,一不小心刷题上瘾. 刷完欧拉计划中的63道基础题,能学会Rust编程吗? "欧拉计划"的网址: https ...
- 3.5 Rust Generic Types, Traits, and Lifetimes
Every programming language has tools for effectively handling the duplication of concepts. In Rust, ...
随机推荐
- python之路第一天
2018-07-11星期三 创建自己的博客(博客园): 登陆 我的博客 随笔:所有人在博客中都能看见的文章 文章:别人看不见,只能URL访问--我把网页地址发给你,你才能看到 日志:别人看不到,URL ...
- Java开发环境之MySql
查看更多Java开发环境配置,请点击<Java开发环境配置大全> 叁章:MySql安装教程 1)去官网下载MySql安装包 https://www.mysql.com/downloads/ ...
- Pthon面向对象-补充知识
Pthon面向对象-补充知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.tracemalloc 标准库tracemalloc,可以统计内存使用情况,通过下面的案例可以看出内 ...
- 关于free的使用疑惑
#include <stdio.h> #include <string.h> #include <stdlib.h> #include "mainc26. ...
- drf框架(2)
drf框架 """接口: 接口规范: drf的生命周期: 序列化组件: 三大认证:过滤,删选,排序组件 请求,响应,解析,异常 jwt:json web tooken & ...
- PHP——file_put_contents()函数
前言 作为PHP的一个内置函数,他的作用就是将一个字符串写入文件 简介 使用 换行和追加写入 file_put_contents('./relation/bind.txt', $val['id'].' ...
- CentOS7下安装Python3和PIP3
为了方便以后编译,所以整合了下配置流程 先查看是否安装了Python3 python3 -V 如果没有安装,则先安装依赖包 yum install zlib-devel bzip2-devel ope ...
- [Flutter] Style a message chat style-ish bubble
const kOtherBubblePointer = BorderRadius.only( topRight: Radius.circular(30), bottomLeft: Radius.cir ...
- Bagging and Random Forest
Bagging和随机森林RF. 随机森林是最受欢迎和最强大的机器学习算法之一.它是一种称为Bootstrap Aggregation或bagging的集成机器学习算法. bootstrap是一种强大的 ...
- WinDbg常用命令系列---.effmach
.effmach (Effective Machine) .effmach命令显示或更改调试器使用的处理器模式. .effmach [MachineType] 参数: MachineType指定调试器 ...