Rust语言开发基础(四)基础中的基础

介绍:对新手及一些非C系列开发人员补充一些知识点,供查阅,可跳过macos

1、什么是标识符
标识符是指常量、 变量、语句标号以及用户自定义函数的名称。
例如,C语言规定标识符只能由字母、数字、 下划线组成,而且只能由字母、下划线开头。
一些标识符被赋于特定的含义就叫作保留字(或称为关键字)函数

Rust的标识符是全部符合下面规则的非空的unicode字符串
规则1:
A. 不管是首个字符仍是首字符外的其它字符的属性涵盖C语言系列和Java语言系列的对标识符首个字符的定义
附注:
(1)C系和Java系的标识符定义规则。
C语言系列标识符定义:C语言规定标识符只能由字母、数字、 下划线组成,而且只能由字母、下划线开头。
Java语言系列标识符定义:Java语言的标识符必须以字母、下划线、美圆符开头,后面能够跟任意数目的字母、数字、下划线、美圆符。此处的字母并不局限于26个大小写字母,并且能够包含中文字符、日文字符、韩文字符等。
(2)已经做为关键字标识不能再做为标识符使用。
(3)C和Java都区分大小写。测试

规则2:
首个字符是下划线的状况,标识符是必须超过1个字符大小的,单个下划线不能做为一个标识符存在。ui

总结:Rust标识符以字母或者下划线开头,后边能够跟任意的字符序列,数字,或者下划线。指针

2、操做符
Rust语言中的操做符也大致与C系列语言相同。
1. 算数运算符有*、/、%、+ 、-(乘、除、取余、加、减)。
另外,- 也是一个一员前置运算符,表示负数。code

2. 位运算符>>, <<、&、|、和^ 。
另外,若是应用于一个整数值,!反转全部的位(像~ 在C 中的做用同样)。unicode

3. 比较操做符有==、!=、<、>、<= 和>= 。开发

4. 短路(惰性)布尔操做符有&&(与)和||(或)。字符串

5. 二元操做符as。
将表达式放在左侧,并将须要转化的类型放在右边,若是转换是可行的,那么就会将表达式的结果转换为给定的类型。
一般,as只能用于原始的整数类型或者指针,而且不能重载。transmute能够对一样大小和对齐的类型进行转换。
示例:
let x: f64 = 4.0;
let y: uint = x as uint;
assert!(y == 4u);get

3、Rust的代码风格

1. 首选的代码风格是:对于函数,变量,模块名使用小写字母,使用下划线提升可读性,
2. 自定义类型使用驼峰法。

4、关于下划线
1. 能够用于代替数值当中的小数点。
98_222 = 98.222

2. 用于消除警告
static MONSTER_FACTOR: f64 = 57.8;
let monster_size: f64 = 10.0;
let monster_size: int = 60;  (引起警告warning)
let _monster_size = 60; (消除警告)

5、双冒号::表示命名空间,这与C++相同
use buffer::BufReader;
use net::NetworkStream;
use version::{HttpVersion};
use method::Method;
use header::{Headers, ContentLength, TransferEncoding};
use http::h1::{self, Incoming, HttpReader};
use http::h1::HttpReader::{SizedReader, ChunkedReader, EmptyReader}; //表示引用这个包里的3个模块
use uri::RequestUri;

1. 包路径Path,也便是命名空间使用::分隔,与C++相似。
如:x::y::z;

A. 若是是以::开头,则表示全局路径的开始,被认为是组件开始的根路径
moda {
pubfnfoo() {}
}
modb {
    pubfnfoo() {
        ::a::foo(); // call a's foo function
    }
}

B.若是以super::开头,表示调用父模块的方法
moda {
    pubfnfoo() {}
}
modb {
    pubfnfoo() {
        super::a::foo(); // call a's foo function
    }
}

C.若是以self::开头,表示调用本模块的方法
fnfoo() {}
fnbar() {
    self::foo();
}

6、特殊属性
在Rust中声明能够用“属性”标注,它们看起来像:
#[test]
或者 #![test]
案例1
#[foo]
struct    Foo;
mod    bar    {
    #![bar]
}
#[foo]    做用于下一个项,在这就是struct声明。     
#![bar]   做用于包含它的项,在这是mod声明。不然,它们是同样的。它们都以某种方式改变它们附加到的项的意义。

案例2
#[test]
fn check()    {
    assert_eq!(2, 1+1);
}
这意味着它是特殊的:当你运行测试,这个函数将会执行。当你正常编译时,它甚至不会被包含进来。这个函数如今是一个测试函数。

属性也能够有附加数据
#[inline(always)]
fn    super_fast_fn()  {

或者甚至是键值:
#[cfg(target_os    =    "macos")]
mod macos_only {

#[derive(Debug)] struct    Point    {     x:    i32,     y:    i32, } Rust属性被用在一系列不一样的地方。在参考手册中有一个属性的全表。目前,你不能建立你本身的属性。

相关文章
相关标签/搜索