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 上。一個struct
的impl
塊或enum
也行:
#![feature(associated_consts)]
struct Foo;
impl Foo {
const FOO: u32 = 3;
}