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 等,今年年初我开始接触 ...
随机推荐
- SpringJdbc 【springjdbc的使用方法】
1 什么是springjdbc spring对jdbc的封装 2 使用SpringJdbc的编程步骤 2.1 导包 spring-jdbc : springjdbc的包 mysql : MySQL的驱 ...
- 基于IFC标准的4DBIM可视化平台
- SDUT 3362 数据结构实验之图论六:村村通公路
数据结构实验之图论六:村村通公路 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 当前农村公 ...
- SDUT 3361 数据结构实验之图论四:迷宫探索
数据结构实验之图论四:迷宫探索 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 有一个地下迷 ...
- Linux文件概念
大多数资源,Linux都是以文件的方式来访问. Linux系统上的文件部分类型说明 –普通文件. •就是储存到磁盘上大家所操作的各种数据文件: –管道文件. •是一个从一端发送数据,从另一端接收数据的 ...
- MVC Areas
ASP.NET MVC中,是依靠某些文件夹以及类的固定命名规则去组织model实体层,views视图层和控制层的.如果是大规模的应用程序,经常会由不同功能的模块组成,而每个功能模块都由MVC中的三层所 ...
- DropDownList判断值是否存在下拉列表中
//1.值是text string aa= Request.QueryString["CallReason"].ToString();//获取传值 if (DropDownList ...
- 使用metasploit进行栈溢出攻击-2
基本的栈溢出搞明白了,真实攻击中一个很重要的问题是shellcode生成. 利用Metasploit提供的工具,可以方便的生成shellcode,然后可以使用第一篇中的代码进行验证. 先说一下如何生成 ...
- Django之后台管理一
所有的网站都有一个管理后台来对所有的网站数据进行管理.那么Django的后台管理是如何进行的.在网页中输入http://127.0.0.1:8001/admin.得到如下的登录界面 在这里可以看到管理 ...
- ubuntu - 14.04,解决Gnome桌面右键菜单失效问题!
我安装完ubuntu14.04,首先安装经典版的Gnome,刚安装完经典版的Gnome,在桌面点击鼠标右键会弹出菜单,使用非常方便,但是当我安装了最新版的Gnome15.10之后,我发现再进入经典版的 ...