【问题标题】:Rust macros: how to create a derived identifier? [duplicate]Rust 宏:如何创建派生标识符? [复制]
【发布时间】:2019-05-15 11:05:41
【问题描述】:

对于标识符,我可以使用 ident 类型的现有标记,或者创建一个固定/文字标识符。 但是如何创建一个“派生的”标识符呢?这意味着,有了一个现有的令牌 $id,我想创建一些派生标识符,如 $id_suffix - 确切的名称并不重要,真的 - 只要它是一个新的,并且确定性地从 $id 派生。

【问题讨论】:

  • @Boiethios 这个问题本身就是重复的。
  • @SebastianRedl 我知道,但我对您链接的答案不满意:concat_idents 是一个不打算稳定的夜间功能。答案应该以“不,因为那不卫生”开头。
  • 您想如何使用该派生标识符?如果您想在宏之外使用它,那么设计上是不可能的)。如果您想在宏内部使用它,那么您可能不需要从现有令牌中派生它,因为宏系统确保不会发生冲突。您能否向我们展示一些代码,说明您将如何使用假设的 derive! 操作?
  • 前两个副本显示了使用 mashup crate 的解决方法。

标签: macros rust rust-macros


【解决方案1】:

你不能。这是宏系统的限制。

有一个特殊的宏可以让你创建一个标识符,但是你不能在有用的地方使用它,比如一个新变量的名字。

【讨论】:

  • 嗯,听起来像一个严重的缺陷。这是故意的吗?
  • 前两个副本显示了使用 mashup crate 的解决方法。
  • 实际上,我想出了一个可能的解决方案——至少对于我的用例来说是这样。我可以创建一个内部模块,以标识符命名,传递给宏 - $id:ident - 然后将任意数量的“派生”类型放入其中。已经测试过了,好像可以了。
猜你喜欢
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多