标识符

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. PCL —— RCNN Family 中层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/6046411.html RCNN是从图像中检测物体位置的方法,严格来讲不属于三维计算机视觉.但是这种方法却又非常非常 ...

  2. Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at ExTestDrive.main ...

  3. 2015年阿里实习生面试Java研发工程师 小记

    5月5日,广州,阿里实习生面试,Java研发工程师,完全被虐orz 几乎没有Java项目开发经验,接近零基础,去水了一发,毫无悬念的被刷了..RP也是杠杠的,准备过的题目一个都没被问到,算法题也是一条 ...

  4. [转]JSP中的编码设置

    转至:http://blog.csdn.net/XinVSYuan/article/details/3864853 1. pageEncoding:<%@ page pageEncoding=& ...

  5. MVC5中的路由

    [Route("dazhao/{id}")] [Route("xixi/index")] [Route("xiaohan")] public ...

  6. Django会话,用户和注册之cookie

    HTTP状态和TCP不一样,HTTP是无状态的,也就是这一次请求和下一次请求之间没有任何状态保持,我们无法根据请求例如IP来识别是否在同一人的连续性请求.就像我们在访问网站的时候,输入了用户名和密码, ...

  7. Linux的重要子目录

    1:  网卡的配置文件 [ :0C::::BD #MAC地址 TYPE=Ethernet #以太网 UUID=e982e20a-e7ef--8e44-a7c0c474c708 #Linux系统内部的标 ...

  8. CI框架源码学习笔记1——index.php

    做php开发一年多了,陆陆续续用过tp/ci/yii框架,一直停留在只会使用的层面上,关于框架内部的结构实际上是不甚了解的.为了深入的学习,决定把CI框架的源码从头到尾的学习一下, 主要因为CI框架工 ...

  9. docker log: containerid-json.log 文件disappear,问题排查及解决方案

    问题排查: 运行 #docker info   查阅资料,知道了docker的logging driver相关理论:https://docs.docker.com/engine/admin/loggi ...

  10. Mysql INNER JOIN

    1.MySQL INNER JOIN子句将一个表中的行与其他表中的行进行匹配,并允许从两个表中查询包含列的行记录. 2.INNER JOIN子句是SELECT语句的可选部分,它出现在FROM子句之后. ...