鍍金池/ 教程/ Java/ 關(guān)聯(lián)常量
哲學家就餐問題
鏈接進階
名詞中英文對照
測試
引用和借用
泛型
方法語法
函數(shù)
不安全代碼
并發(fā)
裝箱語法和模式
注釋
棧和堆
運算符與重載
語法索引
文檔
固有功能
所有權(quán)
循環(huán)
通用函數(shù)調(diào)用語法
不定長類型
<code>const</code> 和 <code>static</code>
迭代器
其他語言中的 Rust
枚舉
詞匯表
If語句
猜猜看
錯誤處理
生命周期
編譯器插件
發(fā)布途徑
閉包
trait 對象
不使用標準庫
關(guān)聯(lián)常量
外部函數(shù)接口(FFI)
類型轉(zhuǎn)換
原生類型
匹配
參考文獻
Rust 編程語言
內(nèi)聯(lián)匯編
條件編譯
選擇你的保證
學習 Rust
`type`別名
自定義內(nèi)存分配器
屬性
if let
高效 Rust
可變性
語法和語義
模式
基準測試
結(jié)構(gòu)體
變量綁定
語言項
切片模式
<code>Deref</code> 強制多態(tài)
關(guān)聯(lián)類型
裸指針
<code>Borrow</code> 和 <code>AsRef</code>
準備
Rust 開發(fā)版
字符串

關(guān)聯(lián)常量

associated-constants.md
commit 024aa9a345e92aa1926517c4d9b16bd83e74c10d

通過associated_consts功能,你像這樣可以定義常量:

#![feature(associated_consts)]

trait Foo {
    const ID: i32;
}

impl Foo for i32 {
    const ID: i32 = 1;
}

fn main() {
    assert_eq!(1, i32::ID);
}

任何Foo的定義都必須定義ID,不定義的話:

#![feature(associated_consts)]

trait Foo {
    const ID: i32;
}

impl Foo for i32 {
}

會給出

error: not all trait items implemented, missing: `ID` [E0046]
     impl Foo for i32 {
     }

也可以實現(xiàn)一個默認值:

#![feature(associated_consts)]

trait Foo {
    const ID: i32 = 1;
}

impl Foo for i32 {
}

impl Foo for i64 {
    const ID: i32 = 5;
}

fn main() {
    assert_eq!(1, i32::ID);
    assert_eq!(5, i64::ID);
}

如你所見,當實現(xiàn)Foo時,你可以不實現(xiàn)它(關(guān)聯(lián)常量),當作為i32時。接著它將會使用默認值。不過,作為i64時,我們可以增加我們自己的定義。

關(guān)聯(lián)常量并不一定要關(guān)聯(lián)在一個 trait 上。一個structimpl塊或enum也行:

#![feature(associated_consts)]

struct Foo;

impl Foo {
    const FOO: u32 = 3;
}