Rust 使用枚举变量作为函数时,这种奇怪的语法是什么?

Rust 使用枚举变量作为函数时,这种奇怪的语法是什么?,rust,rust-proc-macros,Rust,Rust Proc Macros,下面是syn::parse的mod文档给出的示例 枚举项{ 结构(ItemStruct), 枚举(ItemEnum), } 结构项结构{ 结构令牌:令牌![struct], 识别号:识别号, 大括号\u标记:标记::大括号, 字段:带标点, } 项目的impl解析{ fn parse(输入:ParseStream)->结果{ 让lookahead=input.lookahead1(); if lookahead.peek(令牌![struct]){ input.parse().map(Item:

下面是
syn::parse
的mod文档给出的示例

枚举项{
结构(ItemStruct),
枚举(ItemEnum),
}
结构项结构{
结构令牌:令牌![struct],
识别号:识别号,
大括号\u标记:标记::大括号,
字段:带标点,
}
项目的impl解析{
fn parse(输入:ParseStream)->结果{
让lookahead=input.lookahead1();
if lookahead.peek(令牌![struct]){

input.parse().map(Item::Struct)//此语法是标准的Rust语法。您可以使用tuple Struct或类似tuple Struct的枚举变量作为函数。请参见以下小示例:

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
)():

//接受函数的函数
fn字符串\u fn(f:f)->O
哪里
F:FnOnce(字符串)->O,
{
f(“peter.”to_string())
}
字符串_fn(| s | println!(“{}”,s));//使用clojure
string_fn(std::mem::drop);//使用函数指针
//使用枚举变量作为函数
让u:Color=string_fn(Color::Str);

您可以在中找到有关此功能的更多信息。

此语法是标准的Rust语法。您可以使用tuple struct或类似tuple struct的枚举变量作为函数。请参阅以下小示例:

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
)():

//接受函数的函数
fn字符串\u fn(f:f)->O
哪里
F:FnOnce(字符串)->O,
{
f(“peter.”to_string())
}
字符串_fn(| s | println!(“{}”,s));//使用clojure
string_fn(std::mem::drop);//使用函数指针
//使用枚举变量作为函数
让u:Color=string_fn(Color::Str);

您可以在中找到有关此功能的更多信息。

谢谢您提供的示例和对本书的参考!谢谢您提供的示例和对本书的参考!