2.1 Rust概念
标识符
The first character is a letter.
The remaining characters are alphanumeric or _.
或
The first character is _.
The identifier is more than one character. _ alone is not an identifier.
The remaining characters are alphanumeric or _.
如果想使用Rust的关键字作为标识符,则需要以r#为前缀
Raw identifiers
Sometimes, you may need to use a name that’s a keyword for another purpose. Maybe you need to call a function named match that is coming from a C library, where ‘match’ is not a keyword. To do this, you can use a “raw identifier.” Raw identifiers start with r#:
let r#fn = "this variable is named 'fn' even though that's a keyword"; // call a function named 'match'
r#match();
2.1 variables and mutability
cargo new variables
[root@itoracle test]# vim variables/src/main.rs
fn main() {
let x = ;
println!("The value of x is: {}", x);
x = ;
println!("The value of x is: {}", x);
}
以上代码将在编译时报错,因为rust默认变量是不能对其值修改的。以下代码是正确的
fn main() {
let mut x = ;
println!("The value of x is: {}", x);
x = ;
println!("The value of x is: {}", x);
}
[root@itoracle test]# cd variables/
[root@itoracle variables]# cargo run
Compiling variables v0.1.0 (/usr/local/automng/src/rust/test/variables)
Finished dev [unoptimized + debuginfo] target(s) in .15s
Running `target/debug/variables`
The value of x is:
The value of x is:
变量与常量
区别:常量必须在编辑时就确定其值,变量可以是表达式,可以在运行时确定其值。
First, you aren’t allowed to use mut with constants. Constants aren’t just immutable by default—they’re always immutable.
You declare constants using the const keyword instead of the let keyword, and the type of the value must be annotated. Just know that you must always annotate the type.
Constants can be declared in any scope, including the global scope, which makes them useful for values that many parts of code need to know about.
The last difference is that constants may be set only to a constant expression, not the result of a function call or any other value that could only be computed at runtime.
Here’s an example of a constant declaration where the constant’s name is MAX_POINTS and its value is set to 100,000. (Rust’s naming convention for constants is to use all uppercase with underscores between words, and underscores can be inserted in numeric literals to improve readability):
[root@itoracle variables]# vim src/main.rs
fn main() {
let mut x = ;
println!("The value of x is: {}", x);
x = ;
println!("The value of x is: {}", x);
const MAX_POINTS: u32 = 100_000;
println!("常量:{}",MAX_POINTS)
}
[root@itoracle variables]# cargo run
Compiling variables v0.1.0 (/usr/local/automng/src/rust/test/variables)
Finished dev [unoptimized + debuginfo] target(s) in .10s
Running `target/debug/variables`
The value of x is:
The value of x is:
常量:
2.4 注释
All programmers strive to make their code easy to understand, but sometimes extra explanation is warranted. In these cases, programmers leave notes, or comments, in their source code that the compiler will ignore but people reading the source code may find useful.
单行注释//
fn main() {
let lucky_number = ; // I’m feeling lucky today
}
fn main() {
// I’m feeling lucky today
let lucky_number = ;
}
2.5 流程控制
if 表达式
fn main() {
let number = ;
if number % == {
println!("number is divisible by 4");
} else if number % == {
println!("number is divisible by 3");
} else if number % == {
println!("number is divisible by 2");
} else {
println!("number is not divisible by 4, 3, or 2");
}
}
if 中使用 let 语句
要求 if 条件各个分支返回的数据类型必须相同
fn main() {
let condition = true;
let number = if condition {
} else {
};
println!("The value of number is: {}", number);
}
loop循环
无返回值
fn main() {
let mut count = ;
loop{
count += ;
if count == {
break;
}
}
}
有返回值
fn main() {
let mut counter = ;
let result = loop {
counter += ;
if counter == {
break counter * ;
}
};
//assert_eq!方法可以在result的值不为20时抛出异常
assert_eq!(result, );
}
比如上面的方法,如果写成 assert_eq!(result, 19);
则在运行时会给出以下错误信息
[root@itoracle functions]# cargo run
Compiling functions v0.1.0 (/usr/local/automng/src/rust/test/functions)
Finished dev [unoptimized + debuginfo] target(s) in .80s
Running `target/debug/functions`
thread 'main' panicked at 'assertion failed: `(left == right)`
left: ``,
right: ``', src/main.rs:12:5
note: Run with `RUST_BACKTRACE=` for a backtrace.
while循环
fn main() {
let mut number = ;
while number != {
println!("{}!", number);
number = number - ;
}
println!("LIFTOFF!!!");
}
fn main() {
let a = [, , , , ];
let mut index = ;
while index < {
println!("the value is: {}", a[index]);
index = index + ;
}
}
for循环
相比上面while的方法,for不用关心数组的长度
fn main() {
let a = [, , , , ];
for element in a.iter() {
println!("the value is: {}", element);
}
}
for数字遍历
fn main() {
for number in (..).rev() {
println!("{}!", number);
}
println!("LIFTOFF!!!");
}
[root@itoracle functions]# cargo run
Compiling functions v0.1.0 (/usr/local/automng/src/rust/test/functions)
Finished dev [unoptimized + debuginfo] target(s) in .62s
Running `target/debug/functions`
!
!
!
LIFTOFF!!!
fn main() {
for number in .. {
println!("{}!", number);
}
println!("LIFTOFF!!!");
}
[root@itoracle functions]# cargo run
Compiling functions v0.1.0 (/usr/local/automng/src/rust/test/functions)
Finished dev [unoptimized + debuginfo] target(s) in .09s
Running `target/debug/functions`
!
!
!
LIFTOFF!!!
2.1 Rust概念的更多相关文章
- Rust入坑指南:核心概念
如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的. 今天要介绍的是Rust的一个核心概念:Ownership.全文将分为什么是Ownership以及Ownership的传递类型两部 ...
- Rust语言的多线程编程
我写这篇短文的时候,正值Rust1.0发布不久,严格来说这是一门兼具C语言的执行效率和Java的开发效率的强大语言,它的所有权机制竟然让你无法写出线程不安全的代码,它是一门可以用来写操作系统的系统级语 ...
- Rust初步(四):在rust中处理时间
这个看起来是一个很小的问题,我们如果是在.NET里面的话,很简单地可以直接使用System.DateTime.Now获取到当前时间,还可以进行各种不同的计算或者输出.但是这样一个问题,在rust里面, ...
- Rust入门篇 (1)
Rust入门篇 声明: 本文是在参考 The Rust Programming Language 和 Rust官方教程 中文版 写的. 个人学习用 再PS. 目录这东东果然是必须的... 找个时间生成 ...
- Rust语言:安全地并发
http://www.csdn.net/article/2014-02-26/2818556-Rust http://www.zhihu.com/question/20032903 Rust是近两年M ...
- A First Look at Rust Language
文 Akisann@CNblogs / zhaihj@Github 本篇文章同时发布在Github上:http://zhaihj.github.io/a-first-look-at-rust.html ...
- bloom-server 基于 rust 编写的 rest api cache 中间件
bloom-server 基于 rust 编写的 rest api cache 中间件,他位于lb 与api worker 之间,使用redis 作为缓存内容存储, 我们需要做的就是配置proxy,同 ...
- 【转】对 Rust 语言的分析
对 Rust 语言的分析 Rust 是一门最近比较热的语言,有很多人问过我对 Rust 的看法.由于我本人是一个语言专家,实现过几乎所有的语言特性,所以我不认为任何一种语言是新的.任何“新语言”对我来 ...
- Tokio,Rust异步编程实践之路
缘起 在许多编程语言里,我们都非常乐于去研究在这个语言中所使用的异步网络编程的框架,比如说Python的 Gevent.asyncio,Nginx 和 OpenResty,Go 等,今年年初我开始接触 ...
随机推荐
- Eclipse安装Web/JavaEE插件、Eclipse编写HTML代码
1 Eclipse没有Web插件和JavaEE插件咋整 1.1 在Eclipse中菜单help选项中选择install new software选项 1.2 在work with 栏中输入 http: ...
- 电脑安装unity3d有C盘逐渐爆满问题解决方案
打开unity3d软件,Edit - Preference - GI Cache选中 Custom Cache Location,切换到别的盘,然后点击 Clean Cache清空一次,再查看C盘,存 ...
- UIActionSheet(操作列表)
#import "AppDelegate.h" @interface AppDelegate ()<UIActionSheetDelegate> @end @imple ...
- ZROI2018提高day3t3
传送门 分析 我们对于每一个可以匹配的字符都将其从栈中弹出,然后他的哈希值就是现在栈中的字符哈希一下.然后我们便可以求出对于哪些位置它们的哈希值是一样的,即它们的状态是一致的.而这些点可以求出它们的贡 ...
- poj3171 Cleaning Shifts
传送门 题目大意 有一个大区间和n个小区间,每个小区间都有一个代价,求最少付出多少代价可以使得小区间完全覆盖大区间. 分析为了方便起见我们先将s变为2,其它的位置都对应更改以便后期处理.我们考虑以t1 ...
- Hive安装及配置
第一步:下载hive并解压 tar zxvf hive-0.8.1-bin.tar.gz 重命名: mv hive-0.8.1-bin hive 给权限:chown hadoop:hadoop hiv ...
- Ryouko's Memory Note
题目意思:一个书有 n 页,每页的编号依次从 1 到 n 编排.如果从页 x 翻到页 y,那么|x-y|页都需要翻到(联系生活实际就很容易理解的了).接着有m pieces 的 information ...
- cs231n knn
# coding: utf-8 # In[19]: import random import numpy as np from cs231n.data_utils import load_CIFAR1 ...
- Linux下c语言环境概述
Linux下C语言环境概述 主要涉及编辑器.编译链接器.调试器.项目管理工具 编辑器 Linux中常用的编辑器有vi和emacs 查看vim配置文件并编辑 编译链接器 在Linux中,最常用的编译器是 ...
- C++面试笔记--循环链表,队列,栈,堆
之前已经学会了单链表的建立删除插入转置以及一些普通操作,双链表和单链表差不多,就是多了一个前驱指针,在许多操作中很方便,但是加了一个指针开销应该会大一些,总体上影响不大,这里开始讨论循环链表以及其他的 ...