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. 为什么说pt-osc可能会引起主从延迟,有什么好办法解决或规避吗?

    若复制中binlog使用row格式,对大表使用pt-osc把数据从旧表拷贝到临时表,期间会产生大量的binlog,从而导致延时 pt-osc在搬数据过程中insert...select是有行锁的,会降 ...

  2. Java集合框架总结2_Map

    1. Map接口概述 Map与Collection并列存在.用于保存具有映射关系的数据:key-value: Map中的key和value都可以是任何应用类型的数据: Map中的key用Set来存放, ...

  3. MySQL MGR--MGR部署

    MGR部署 场景描述: 使用三台服务器搭建一个简单MGR集群,使用MySQL 5.7.24版本,服务器列表为: 192.168.1.147 192.168.1.148 192.168.1.149 1. ...

  4. C#锁对象代码

    private static readonly object SequenceLock = new object(); private static readonly object SequenceL ...

  5. maven mvn跳过生成javadoc 打包报错

    遇到javadoc用maven打包报错的问题,起初没发现javadoc,后发现并在pom看到了javadoc的配置. [ERROR] Failed to execute goal org.apache ...

  6. java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone.

    java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more tha ...

  7. js里调用函数时,函数名带括号与不带括号的区别

    function test(){ return 1;}var a=test;console.log(a);//输出[Function: test]var b=test();console.log(b) ...

  8. HBase学习笔记之HBase原理和Shell使用

    HBase学习指南之HBase原理和Shell使用 参考资料: 1.https://www.cnblogs.com/nexiyi/p/hbase_shell.html,hbase shell

  9. LeetCode 1008. Construct Binary Search Tree from Preorder Traversal

    原题链接在这里:https://leetcode.com/problems/construct-binary-search-tree-from-preorder-traversal/ 题目: Retu ...

  10. SpringBoot第二节(SpringBoot整合Mybatis)

    1.创建Spring Initiallizr项目 一直点击下一步 2.引入依赖 <dependencies> <dependency> <groupId>org.s ...