标识符

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

  1. Rust入坑指南:核心概念

    如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的. 今天要介绍的是Rust的一个核心概念:Ownership.全文将分为什么是Ownership以及Ownership的传递类型两部 ...

  2. Rust语言的多线程编程

    我写这篇短文的时候,正值Rust1.0发布不久,严格来说这是一门兼具C语言的执行效率和Java的开发效率的强大语言,它的所有权机制竟然让你无法写出线程不安全的代码,它是一门可以用来写操作系统的系统级语 ...

  3. Rust初步(四):在rust中处理时间

    这个看起来是一个很小的问题,我们如果是在.NET里面的话,很简单地可以直接使用System.DateTime.Now获取到当前时间,还可以进行各种不同的计算或者输出.但是这样一个问题,在rust里面, ...

  4. Rust入门篇 (1)

    Rust入门篇 声明: 本文是在参考 The Rust Programming Language 和 Rust官方教程 中文版 写的. 个人学习用 再PS. 目录这东东果然是必须的... 找个时间生成 ...

  5. Rust语言:安全地并发

    http://www.csdn.net/article/2014-02-26/2818556-Rust http://www.zhihu.com/question/20032903 Rust是近两年M ...

  6. A First Look at Rust Language

    文 Akisann@CNblogs / zhaihj@Github 本篇文章同时发布在Github上:http://zhaihj.github.io/a-first-look-at-rust.html ...

  7. bloom-server 基于 rust 编写的 rest api cache 中间件

    bloom-server 基于 rust 编写的 rest api cache 中间件,他位于lb 与api worker 之间,使用redis 作为缓存内容存储, 我们需要做的就是配置proxy,同 ...

  8. 【转】对 Rust 语言的分析

    对 Rust 语言的分析 Rust 是一门最近比较热的语言,有很多人问过我对 Rust 的看法.由于我本人是一个语言专家,实现过几乎所有的语言特性,所以我不认为任何一种语言是新的.任何“新语言”对我来 ...

  9. Tokio,Rust异步编程实践之路

    缘起 在许多编程语言里,我们都非常乐于去研究在这个语言中所使用的异步网络编程的框架,比如说Python的 Gevent.asyncio,Nginx 和 OpenResty,Go 等,今年年初我开始接触 ...

随机推荐

  1. java中字符串处理、串联和转换的几个常用方法,以及如果需要自己编程实现的具体实施步骤。

    What? 如何分类? 如何使用? //String 类提供处理 Unicode 代码点(即字符)(TT观点:指的莫非就是对象的意思.)和 Unicode 代码单元(即 char 值)的方法.(TT观 ...

  2. SPOJ LCMSUM - LCM Sum

    题意是求: $\sum_{i = 1}^{n}lcm(i, n)$ $= \sum_{i = 1}^{n}\frac{ni}{gcd(i, n)}$ $= n\sum_{i = 1}^{n}\frac ...

  3. Entity Framework Tutorial Basics(5):Create Entity Data Model

    Create Entity Data Model: Here, we are going to create an Entity Data Model (EDM) for SchoolDB datab ...

  4. 使用paramiko连接EC2主机

    在亚马逊云上建的主机没有密码,只有一个PEM文件.所以paramiko需要通过该PEM文件登录云主机进行管理 有两种方式,第一种被我注解了 import paramiko ssh = paramiko ...

  5. 浅谈assert()函数的用法

    #include<stdio.h> #include<assert.h> char * Strcpy(char *dst,const char *src) { assert(d ...

  6. MAC的开机启动

    之前了解到MAC下的开机启动和定时自动运行不再沿用cron,而是有自己的launchctl:把启动文件放在/Library/LaunchDaemon/xxx.plist,里面可以记录运行的时间间隔.工 ...

  7. day05.2-Vim编辑器

    一. 安装Vim编辑器和打开新建文件      安装Vim编辑器:apt-get   install   Vim 新建与打开Vim文件:vim   文件名 二. Vim编辑器三种模式的使用与切换 指令 ...

  8. 实现简易Web服务器(c语言)

    任务: (1)实现服务器与客户端间的通信. (2)可以实现HTTP请求中的GET方法. (3)提供静态网页浏览功能,如可浏览:HTML页面,无格式文本,常见图像格式等. (4)提供可以传递参数的动态网 ...

  9. jQuery回车触发事件

    举例: 需求:要求回车触发下一步 Html部分 <div style="margin-top: 25px;"> <a href="#" cla ...

  10. Sum of LCM (lcmsum)

    题目 [题目描述] 对于 $ A_1, A_2, \ldots, A_N $ ,求$\sum_{i = 1}^N \sum_{j = 1}^N \mathrm{lcm}(A_i, A_j)$ 的值. ...