- 浏览: 17886 次
最新评论
文章列表
5.14 Match
经常,一个简单的if/else还不够,因为你可能会有多于两种情况.而且,条件会变得更加复杂.Rust有一个关键字,match,允许你替代复杂的if/else组合,来实现一些更强大的功能.看一下:
let x = 5;
match x {
1 => println!("one"),
...
- 2015-08-17 17:26
- 浏览 340
- 评论(0)
5.13 枚举
Rust中的枚举是一个可以代表一个或多个可能值的类型:
enum Message {
Quit,
ChangeColor(i32, i32, i32),
Move { x: i32, y: i32 },
Write(String),
}
每一个变量都可以成为这些值的其中一个.定义一个枚举的语法复用了定义一个结构体的语法,你可以顶一个一个没有数据的变量(就像一个单元结构体),有名子的变量,和无名变量(就像一个元组).和结构体中分开的定义不同,一个枚举就是一个类型.一个枚举的值可以是任意一个变量.因此,一个枚举有时被称为"集合类型& ...
- 2015-08-17 17:06
- 浏览 504
- 评论(0)
5.12 结构体
结构体是一个表示复杂数据类型的方式.例如,你可以计算二维坐标,我们需要x和y的值:
let origin_x = 0;
let origin_y = 0;
一个结构体就可以让你将两个值合并成一个独立的值:
struct Point {
x: i32,
y: i32,
}
fn main() {
let origin = Point {x: 0, y: 0}; // origin: Point
println!("The origin is at ({}, {})", origin.x, origin.y) ...
- 2015-07-19 16:14
- 浏览 387
- 评论(0)
5.11 可变性
可变性,就是改变某些值的能力,Rust语言和其他语言有很大的区别.第一点就是Rust默认是不可变的:
let x = 5;
x = 6; // error!
我们可以引入mut关键字来增加可变性:
let mut x = 5;
x = 6; // no problem!
这是一个可变绑定. ...
- 2015-07-19 15:16
- 浏览 312
- 评论(0)
5.10 生命期
本节是Rust三处描述所有权系统的其中之一.所有权是Rust最独特和引人注目的特性,这也是Rust程序员必须熟悉的一个特性.所有权使Rust得以实现它最大的设计目标,内存安全.这里有一些不同的概念,每一个都有自己的章节 ...
- 2015-07-18 23:36
- 浏览 239
- 评论(0)
5.9 引用和借用
本节是Rust三处描述所有权系统的其中之一.所有权是Rust最独特和引人注目的特性,这也是Rust程序员必须熟悉的一个特性.所有权使Rust得以实现它最大的设计目标,内存安全.这里有一些不同的概念,每一个都有自己的 ...
- 2015-07-18 22:32
- 浏览 468
- 评论(0)
5.8 所有权
本节是Rust三处描述所有权系统的其中之一.所有权是Rust最独特和引人注目的特性,这也是Rust程序员必须熟悉的一个特性.所有权使Rust得以实现它最大的设计目标,内存安全.这里有一些不同的概念,每一个都有自己的章节:
所有权,你正在读的
借用(borrowing, 5.9), 以及它的关联特性'引用'
生命期(5.10),以及borrowing的高级特性
这三者是相关的,也是循序渐进的.你必须要完全理解这个三个部分.
5.8.1 元
在我们讨论细节之前,有两个关于所有权系统的重要说明.
Rust致力于安全和快速.它实现这个目标通过" ...
- 2015-07-16 13:48
- 浏览 499
- 评论(0)
5.5 if
Rust 对if的操作并不复杂,但是你会发现它更像一个动态类型语言,而不是一个传统的系统语言.让我们看看你是否知道这其中的微妙之处.
if是一个非常常见的概念的一个特定表述,"分支".这个名字来自于树的分支:一个决策点,多条路径可供选择.
在if的分支,是两条路的一种选择:
let x = 5;
if x == 5 {
println!("x is five!");
}
如果我们改变了x的值,这行字就不会被打印.更特别的,如果if后面的表达式是true,那么代码块就会被执行.如果是false,就不会.
...
- 2015-07-16 12:50
- 浏览 459
- 评论(0)
5.3 基本类型
Rust有很多基本数据类型.这意味着他们属于语言内建类型.Rust标准库还提供了很多其他基于基本类型的类型,但是本节说的基本类型是最基本的类型.
5.3.1 Booleans
Rust有内建布尔类型,名叫bool.它有两种值,true和false.
let x = true;
let y: bool = false;
布尔类型常用语if条件.
你可以在标准库说明文档中找到更多说明(http://doc.rust-lang.org/std/primitive.bool.html).
5.3.2 char
char类型代表了一个Unicode字 ...
- 2015-07-14 22:16
- 浏览 614
- 评论(0)
本章我们将把Rust代码拆成一个个的片段,逐个概念来分析.
如果你喜欢从底层细节学习Rust语言,那么按顺序学习本章是最好的选择.
本章的小节也会串联引用每一个概念,如果你读到了其他的概念你不清楚的,那么你可以在对应章节找到说明.
5.1 变量绑定
基本上每一个非"Hello World"Rust程序都会用到变量绑定.他们看起来像这样:
fn main() {
let x = 5;
}
在每一个例子中都写一遍fn main() {有点累赘,所以我们以后就不写他了.如果你依照着写代码的话,记得自己加上你的main()函数.否则你会得到一个错误.
...
- 2015-07-13 23:54
- 浏览 480
- 评论(0)
4.9 Borrow 和 AsRef
Borrow和AsRef特性特性很相似,但是不一样.这里有一个快速的关于两者的回顾.
4.9.1 Borrow
Borrow特性是当你写了一个数据结构,然后你想让一个它的所有者或者借用者类型作为同义词对象来使用.
例如,HashMap就有一个get方法使用了Borrow:
fn get<Q: ?Sized>(&self, k: &Q) -> Option<&V>
where K: Borrow<Q>,
Q: Hash + Eq
这个签名非常复杂 ...
- 2015-07-13 15:20
- 浏览 488
- 评论(0)
4.8 FFI
4.8.1 导论
本章将会介绍一种高速的压缩/解压缩库,以供其他语言使用的方法.Rust目前还不能直接调用C++库,但是可以包含C接口.
下面这个例子就是调用外部函数,如果安装了snappy的话:
# #![feature(libc)]
extern crate libc;
use lib ...
- 2015-07-13 00:05
- 浏览 801
- 评论(0)
4.7 错误处理
有时候程序会发生错误.对于不可避免的事情发生时最好有一个计划来处理.Rust有丰富的处理错误的方法.
你的程序会出现两种类型的错误:失败和崩溃.我们先讨论两者的区别,然后讨论如何处理他们.然后,我们讨论把错误升级为崩溃.
Page 107
4.7.1 失败和崩溃
Rust使用两种错误的类型:失败和崩溃.失败是一种可以被挽回的错误.崩溃却不行.
"挽回"是什么意思呢?在多数情况下,很有可能会发生错误.例如,一个parse函数:
"5".parse();
这个方法将一个字符转换为另一个类型.但是因为他是 ...
- 2015-07-11 16:52
- 浏览 416
- 评论(0)
4.6 并发
Page 100
并发和并行在计算机科学中是非常重要的主题.在工业领域也很火.计算机如今有越来越多的核心,然而很多程序员还没有准备好使用它们.
Rust安全的内存特性同样适用于并发存储.并发的Rust代码也是内存安全的,没有数据竞争.Rust的类型系统会保证这一点,给你提供了有利的帮助在编译时实现并发代码.
在我们开始讨论Rust的并发之前,我们需要理解一个很重要的事情:Rust是一个低级别语言,它的所有功能都是通过库来提供的,而不是语言自身.也就是说你不喜欢Rust处理并发的方式,你完全可以实现一个你自己的版本.mio(https://github.com/c ...
- 2015-07-11 15:49
- 浏览 456
- 评论(0)