#[deprecated = "Use `bar` instead."]
fn foo(a: usize, b: usize) -> usize {
a + b
}
fn foo(a: Bar);
MyStruct { foo: 3, bar: 4 }
foo(bar, baz);
struct
表達式的開始大括號之后和結(jié)束大括號之前加空格:spawn(proc() { do_something(); })
Point { x: 0.1, y: 0.3 }
fn frobnicate(a: Bar, b: Bar,
c: Bar, d: Bar)
-> Bar {
...
}
fn foo<T: This,
U: That>(
a: Bar,
b: Bar)
-> Baz {
...
}
fn foo_bar(a: Bar, b: Bar,
c: |Bar|) -> Bar {
...
}
// 可以在同一行:
foo_bar(x, y, |z| { z.transpose(y) });
// 也可以在新一行縮進函數(shù)體:
foo_bar(x, y, |z| {
z.quux();
z.rotate(x)
})
常見代碼不必在行中用多余的空格來對齊。
// 好
struct Foo {
short: f64,
really_long: f64,
}
// 壞
struct Bar {
short: f64,
really_long: f64,
}
// 好
let a = 0;
let radius = 7;
// 壞
let b = 0;
let diameter = 7;
使用行注釋:
// 等待主線程返回,并設(shè)置過程錯誤碼
// 明顯地。
而不是:
/*
* 等待主線程返回,并設(shè)置過程錯誤碼
* 明顯地。
*/
文檔注釋前面加三個斜線(///
)而且提示你希望將注釋包含在 Rustdoc 的輸出里。
它們支持 Markdown 語言
而且是注釋你的公開API的主要方式。
支持的 markdown 功能包括列在 GitHub Flavored Markdown 文檔中的所有擴展,加上上角標。
任何文檔注釋中的第一行應(yīng)該是一行總結(jié)代碼的單行短句。該行用于在 Rustdoc 輸出中的一個簡短的總結(jié)性描述,所以,讓它短比較好。
所有的文檔注釋,包括總結(jié)行,一個以大寫字母開始,以句號、問號,或者感嘆號結(jié)束。最好使用完整的句子而不是片段。
總結(jié)行應(yīng)該以 第三人稱單數(shù)陳述句形式 來寫。 基本上,這意味著用 "Returns" 而不是 "Return"。
例如:
/// 根據(jù)編譯器提供的參數(shù),設(shè)置一個缺省的運行時配置。
///
/// 這個函數(shù)將阻塞直到整個 M:N 調(diào)度器池退出了。
/// 這個函數(shù)也要求一個本地的線程可用。
///
/// # 參數(shù)
///
/// * `argc` 和 `argv` - 參數(shù)向量。在 Unix 系統(tǒng)上,該信息被`os::args`使用。
///
/// * `main` - 運行在 M:N 調(diào)度器池內(nèi)的初始過程。
/// 一旦這個過程退出,調(diào)度池將開始關(guān)閉。
/// 整個池(和這個函數(shù))將只有在所有子線程完成執(zhí)行后。
///
/// # 返回值
///
/// 返回值被用作進程返回碼。成功是 0,101 是錯誤。
內(nèi)嵌文檔注釋 只用于 注釋 crates 和文件級的模塊:
//! 核心庫。
//!
//! 核心庫是...
Rust 沒有特定的構(gòu)造器,只有返回新實例的函數(shù)。 這些在自動生成的類型文檔中是不可見的,因此你應(yīng)該專門鏈接到它們:
/// An iterator that yields `None` forever after the underlying iterator
/// yields `None` once.
///
/// These can be created through
/// [`iter.fuse()`](trait.Iterator.html#method.fuse).
pub struct Fuse<I> {
// ...
}
fn foo() {
...
}
fn frobnicate(a: Bar, b: Bar,
c: Bar, d: Bar)
-> Bar {
...
}
trait Bar {
fn baz(&self);
}
impl Bar for Baz {
fn baz(&self) {
...
}
}
frob(|x| {
x.transpose()
})
match
分支有大括號,除非是單行表達式。match foo {
bar => baz,
quux => {
do_something();
do_something_else()
}
}
return
語句有分號。fn foo() {
do_something();
if condition() {
return;
}
do_something_else();
}
Foo { bar: 0, baz: 1 }
Foo {
bar: 0,
baz: 1,
}
match a_thing {
None => 0,
Some(x) => 1,
}
通常,Rust 傾向于為“類型級”結(jié)構(gòu)(類型和 traits)使用 CamelCase
而為“值級”結(jié)構(gòu)使用 snake_case
。更確切的約定:
條目 | 約定 |
---|---|
Crates | snake_case (但傾向于單個詞) |
Modules | snake_case |
Types | CamelCase |
Traits | CamelCase |
Enum variants | CamelCase |
Functions | snake_case |
Methods | snake_case |
General constructors | new 或 with_more_details |
Conversion constructors | from_some_other_type |
Local variables | snake_case |
Static variables | SCREAMING_SNAKE_CASE |
Constant variables | SCREAMING_SNAKE_CASE |
Type parameters | 簡潔 CamelCase ,通常單個大寫字母:T |
Lifetimes | 短的小寫: 'a |
在 `CamelCase`中, 首字母縮略詞被當(dāng)成一個單詞:用 `Uuid` 而不是
`UUID`。在 `snake_case` 中,首字母縮略詞全部是小寫: `is_xid_start`。
在 `snake_case` 或 `SCREAMING_SNAKE_CASE` 中,“單詞”永遠不應(yīng)該只包含一個字母,
除非是最后一個“單詞”。所以,我們有`btree_map` 而不是 `b_tree_map`,`PI_2` 而不是 `PI2`。
### 引用函數(shù)/方法名中的類型
函數(shù)名經(jīng)常涉及類型名,最常見的約定例子像 `as_slice`。如果類型有一個純粹的文本名字(忽略參數(shù)),
在類型約定和函數(shù)約定之間轉(zhuǎn)換是直截了當(dāng)?shù)模?
類型名 | 方法中的文本
--------- | ---------------
`String` | `string`
`Vec