Этот синтаксис является стандартным синтаксисом Rust. В качестве функций вы можете использовать варианты перечисления как tuple struct или tuple struct-like. См. Этот небольшой пример:
enum Color {
Str(String),
Rgb(u8, u8, u8),
}
struct Foo(bool);
// Use as function pointers (type annotations not necessary)
let f: fn(String) -> Color = Color::Str;
let g: fn(u8, u8, u8) -> Color = Color::Rgb;
let h: fn(bool) -> Foo = Foo;
В следующем примере эти функции напрямую передаются другой функции (например,Option::map
) ( Детская площадка ):
// A function which takes a function
fn string_fn<O, F>(f: F) -> O
where
F: FnOnce(String) -> O,
{
f("peter".to_string())
}
string_fn(|s| println!("{}", s)); // using a clojure
string_fn(std::mem::drop); // using a function pointer
// Using the enum variant as function
let _: Color = string_fn(Color::Str);
Подробнее об этой функции вы можете узнать в этой главе книги .