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

释放双眼,带上耳机,听听看~!

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

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

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

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

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

二、操作符
Rust语言中的操作符也大体与C系列语言相同。

  1. 算数运算符有*、/、%、+ 、-(乘、除、取余、加、减)。

另外,- 也是一个一员前置运算符,表示负数。

  1. 位运算符>>, <<、&、|、和^ 。

另外,如果应用于一个整数值,!反转所有的位(像~ 在C 中的作用一样)。

  1. 比较操作符有==、!=、<、>、<= 和>= 。

  2. 短路(惰性)布尔操作符有&&(与)和||(或)。

  3. 二元操作符as。

将表达式放在左侧,并将需要转化的类型放在右边,如果转换是可行的,那么就会将表达式的结果转换为给定的类型。
通常,as只能用于原始的整数类型或者指针,并且不能重载。transmute可以对同样大小和对齐的类型进行转换。
示例:
let x: f64 = 4.0;
let y: uint = x as uint;
assert!(y == 4u);

三、Rust的代码风格

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

四、关于下划线

  1. 可以用于代替数值当中的小数点。

98_222 = 98.222

  1. 用于消除警告

static MONSTER_FACTOR: f64 = 57.8;
let monster_size: f64 = 10.0;
let monster_size: int = 60;  (引发警告warning)
let _monster_size = 60; (消除警告)

五、双冒号::表示命名空间,这与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();
}

六、特殊属性
在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属性被用在一系列不同的地方。在参考手册中有一个属性的全表。目前,你不能创建你自己的属性。

给TA打赏
共{{data.count}}人
人已打赏
安全技术

C/C++内存泄漏及检测

2022-1-11 12:36:11

安全漏洞

松下航空系统(IFE)现安全漏洞 可实现非授权访问

2016-12-26 17:59:16

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索