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屬性被用在一系列不一樣的地方。在參考手冊中有一個屬性的全表。目前,你不能建立你本身的屬性。

相關文章
相關標籤/搜索