gpt4 book ai didi

rust - 如何找到 syn::parse 的正确返回类型?

转载 作者:行者123 更新时间:2023-11-29 08:05:48 26 4
gpt4 key购买 nike

我有一个来自 Rust 函数定义的 TokenStream。我想用 syn::parse(和 .unrwap())解析它。但是,我不知道返回类型应该是什么:

let ast: ??? = syn::parse(token_stream_from_function_definition).unwrap();

ast 的类型应该是什么?

最佳答案

syn::parse函数尝试将 TokenStream 解析为您期望的任何。正如文档所说:

Parse tokens of source code into the chosen syntax tree node.

它需要一个类型参数,您通常使用类型推断提供该参数。例如,如果您希望解析一个函数声明:

let fn_decl: syn::FnDecl = syn::parse(token_stream).unwrap();

如果它无法解析 fn 声明,这将导致 panic。


如果您不确切知道会发生什么,那么您可以更笼统,匹配一组可能性,然后检查您找到的内容。为可以出现在相同位置的语法组提供了一些枚举。例如,如果您在希望在同一级别上找到函数声明一些其他声明的上下文中解析代码,则可能需要解析 Item然后匹配所有可能的项目类型:

use syn::Item;

let item: Item = syn::parse(token_stream).unwrap();
match item {
Item::Fn(fn_decl) => {}
Item::Mod(mod_item) => {}
Item::Struct(struct_item) => {}
Item::Enum(enum_item) => {}
_ => {}
}

请注意,syn::Item 有 18 个要匹配的变体,而 syn::Expr 有 40 个!绝对值得缩小可能性并选择要解析的类型,以最满足您的需求。您还可以考虑定义自己的类型,代表您希望找到的各种句法结构,然后实现 syn::Parse手动特征。

关于rust - 如何找到 syn::parse 的正确返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57342132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com