结构体 TokenStream

1.15.0 · 源代码
pub struct TokenStream(/* private fields */);
展开描述

此 crate 提供的主要类型,表示抽象的 token 流,或者更具体地说,表示一个 token tree 序列。该类型提供了迭代这些 token tree 的接口,反之亦然,可以将多个 token tree 收集到一个流中。

这是 #[proc_macro]#[proc_macro_attribute]#[proc_macro_derive] 定义的输入和输出。

实现§

源代码§

impl TokenStream

1.29.0 · 源代码

pub fn new() -> TokenStream

返回一个空的 TokenStream,不包含任何 token tree。

1.29.0 · 源代码

pub fn is_empty(&self) -> bool

检查此 TokenStream 是否为空。

源代码

pub fn expand_expr(&self) -> Result<TokenStream, ExpandError>

🔬这是一个仅限每夜构建的实验性 API。(proc_macro_expand #90765

将此 TokenStream 解析为表达式并尝试展开其中的任何宏。返回展开后的 TokenStream

目前只有展开为字面量的表达式会成功,尽管将来可能会放宽此限制。

注意:在错误条件下,expand_expr 可能会留下未展开的宏,报告错误,导致编译失败,和/或返回 Err(..)。任何错误条件下的具体行为以及哪些条件被视为错误是未指定的,并且将来可能会发生变化。

Trait 实现§

1.15.0 · 源代码§

impl Clone for TokenStream

源代码§

fn clone(&self) -> TokenStream

返回值的副本。了解更多
1.0.0 · 源代码§

fn clone_from(&mut self, source: &Self)

source 执行拷贝赋值。了解更多
1.15.0 · 源代码§

impl Debug for TokenStream

以方便调试的形式打印 token。

源代码§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

使用给定的格式化程序格式化值。了解更多
1.45.0 · 源代码§

impl Default for TokenStream

源代码§

fn default() -> Self

返回类型的“默认值”。了解更多
1.15.0 · 源代码§

impl Display for TokenStream

将 token stream 打印为字符串,该字符串应能无损地转换回相同的 token stream(不考虑 span),但可能不包括带有 Delimiter::None 分隔符的 TokenTree::Group 和负数字面量。

注意:输出的确切形式可能会改变,例如,token 之间使用的空白符可能会改变。因此,在实现过程宏时,您不应依赖对输出字符串(由 to_string 生成)进行简单的子字符串匹配,因为如果发生此类更改,该匹配可能会失效。相反,您应在 TokenTree 级别进行操作,例如匹配 TokenTree::IdentTokenTree::PunctTokenTree::Literal

源代码§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

使用给定的格式化程序格式化值。了解更多
1.30.0 · 源代码§

impl Extend<TokenStream> for TokenStream

源代码§

fn extend<I: IntoIterator<Item = TokenStream>>(&mut self, streams: I)

用迭代器的内容扩展集合。了解更多
源代码§

fn extend_one(&mut self, item: A)

🔬这是一个仅限每夜构建的实验性 API。(extend_one #72631
使用恰好一个元素扩展集合。
源代码§

fn extend_reserve(&mut self, additional: usize)

🔬这是一个仅限每夜构建的实验性 API。(extend_one #72631
为集合预留指定数量额外元素的容量。了解更多
1.30.0 · 源代码§

impl Extend<TokenTree> for TokenStream

源代码§

fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, trees: I)

用迭代器的内容扩展集合。了解更多
源代码§

fn extend_one(&mut self, item: A)

🔬这是一个仅限每夜构建的实验性 API。(extend_one #72631
使用恰好一个元素扩展集合。
源代码§

fn extend_reserve(&mut self, additional: usize)

🔬这是一个仅限每夜构建的实验性 API。(extend_one #72631
为集合预留指定数量额外元素的容量。了解更多
1.29.0 · 源代码§

impl From<TokenTree> for TokenStream

创建一个包含单个 token tree 的 token stream。

源代码§

fn from(tree: TokenTree) -> TokenStream

从输入类型转换为此类型。
1.15.0 · 源代码§

impl FromIterator<TokenStream> for TokenStream

token streams 上的“展平”操作,将来自多个 token streams 的 token tree 收集到单个 stream 中。

源代码§

fn from_iter<I: IntoIterator<Item = TokenStream>>(streams: I) -> Self

从迭代器创建值。了解更多
1.29.0 · 源代码§

impl FromIterator<TokenTree> for TokenStream

将多个 token tree 收集到单个 stream 中。

源代码§

fn from_iter<I: IntoIterator<Item = TokenTree>>(trees: I) -> Self

从迭代器创建值。了解更多
1.15.0 · 源代码§

impl FromStr for TokenStream

尝试将字符串分解为 token 并将这些 token 解析为 token stream。可能会因多种原因失败,例如字符串包含不平衡的分隔符或语言中不存在的字符。解析后的 stream 中的所有 token 都将获得 Span::call_site() span。

注意:某些错误可能会导致 panic 而非返回 LexError。我们保留将来将这些错误更改为 LexError 的权利。

源代码§

type Err = LexError

解析时可能返回的关联错误类型。
源代码§

fn from_str(src: &str) -> Result<TokenStream, LexError>

解析字符串 s 以返回此类型的值。了解更多
1.29.0 · 源代码§

impl IntoIterator for TokenStream

源代码§

type Item = TokenTree

被迭代元素的类型。
源代码§

type IntoIter = IntoIter

我们将其转换为哪种迭代器?
源代码§

fn into_iter(self) -> IntoIter

从值创建迭代器。了解更多
源代码§

impl ToTokens for TokenStream

源代码§

fn to_tokens(&self, tokens: &mut TokenStream)

🔬这是一个仅限每夜构建的实验性 API。(proc_macro_totokens #130977
self 写入给定的 TokenStream了解更多
源代码§

fn into_token_stream(self) -> TokenStream

🔬这是一个仅限每夜构建的实验性 API。(proc_macro_totokens #130977
self 直接转换为 TokenStream 对象。了解更多
源代码§

fn to_token_stream(&self) -> TokenStream

🔬这是一个仅限每夜构建的实验性 API。(proc_macro_totokens #130977
self 直接转换为 TokenStream 对象。了解更多
1.15.0 · 源代码§

impl !Send for TokenStream

1.15.0 · 源代码§

impl !Sync for TokenStream

自动 Trait 实现§

泛型实现 (Blanket Implementations)§

源代码§

impl<T> Any for T
where T: 'static + ?Sized,

源代码§

fn type_id(&self) -> TypeId

获取 selfTypeId了解更多
源代码§

impl<T> Borrow<T> for T
where T: ?Sized,

源代码§

fn borrow(&self) -> &T

从拥有的值进行不可变借用。了解更多
源代码§

impl<T> BorrowMut<T> for T
where T: ?Sized,

源代码§

fn borrow_mut(&mut self) -> &mut T

从拥有的值进行可变借用。了解更多
源代码§

impl<T> CloneToUninit for T
where T: Clone,

源代码§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬这是一个仅限每夜构建的实验性 API。(clone_to_uninit #126799
self 执行拷贝赋值到 dest了解更多
源代码§

impl<T> From<T> for T

源代码§

fn from(t: T) -> T

返回未改变的参数。

源代码§

impl<T, U> Into<U> for T
where U: From<T>,

源代码§

fn into(self) -> U

调用 U::from(self)

也就是说,此转换是由 From<T> for U 的实现决定的。

源代码§

impl<T> ToOwned for T
where T: Clone,

源代码§

type Owned = T

获得所有权后的结果类型。
源代码§

fn to_owned(&self) -> T

从借用的数据创建拥有的数据,通常通过克隆实现。了解更多
源代码§

fn clone_into(&self, target: &mut T)

使用借用的数据替换拥有的数据,通常通过克隆实现。了解更多
源代码§

impl<T> ToString for T
where T: Display + ?Sized,

源代码§

fn to_string(&self) -> String

将给定值转换为 String了解更多
源代码§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

源代码§

type Error = Infallible

转换错误时返回的类型。
源代码§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
源代码§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

源代码§

type Error = <U as TryFrom<T>>::Error

转换错误时返回的类型。
源代码§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

执行转换。