Rust by Example - страница 9
>
>let unload = WebEvent::PageUnload;
>inspect(pressed);
>inspect(pasted);
>inspect(click);
>inspect(load);
>inspect(unload);
>}
>הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
If you use a type alias, you can refer to each enum variant via its alias. This might be useful if the enum's name is too long or too generic, and you want to rename it.
>enum VeryVerboseEnumOfThingsToDoWithNumbers {
>Add,
>Subtract,
>}
>// Creates a type alias
>type Operations = VeryVerboseEnumOfThingsToDoWithNumbers;
>fn main() {
>// We can refer to each variant via its alias, not its long and inconvenient
>// name.
>let x = Operations::Add;
>}
>הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The most common place you'll see this is in impl blocks using the Self alias.
>enum VeryVerboseEnumOfThingsToDoWithNumbers {
>Add,
>Subtract,
>}
>impl VeryVerboseEnumOfThingsToDoWithNumbers {
>fn run(&self, x: i32, y: i32) -> i32 {
>match self {
>Self::Add => x + y,
>Self::Subtract => x - y,
>}
>}
>}
>הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
To learn more about enums and type aliases, you can read the stabilization report from when this feature was stabilized into Rust.
The use declaration can be used so manual scoping isn't needed:
>// An attribute to hide warnings for unused code.
>#![allow(dead_code)]
>enum Status {
>Rich,
>Poor,
>}
>enum Work {
>Civilian,
>Soldier,
>}
>fn main() {
>// Explicitly `use` each name so they are available without
>// manual scoping.
>use crate::Status::{Poor, Rich};
>// Automatically `use` each name inside `Work`.
>use crate::Work::*;
>// Equivalent to `Status::Poor`.
>let status = Poor;
>// Equivalent to `Work::Civilian`.
>let work = Civilian;
>match status {
>// Note the lack of scoping because of the explicit `use` above.
>Rich => println!("The rich have lots of money!"),
>Poor => println!("The poor have no money..."),
>}
>match work {
>// Note again the lack of scoping.
>Civilian => println!("Civilians work!"),
>Soldier => println!("Soldiers fight!"),
>}
>}
>הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
enum can also be used as C-like enums.
>// An attribute to hide warnings for unused code.
>#![allow(dead_code)]
>// enum with implicit discriminator (starts at 0)