gpt4 book ai didi

rust - Rust 宏在特征定义中起作用吗?

转载 作者:行者123 更新时间:2023-11-29 08:30:06 24 4
gpt4 key购买 nike

我可以使用宏构建结构和枚举,但不能使用特征。这是一个错误还是关于我缺少的特征如何工作的东西?这是一个构建失败的简单示例:

macro_rules! fun{
() => { fn hello(); }
}

macro_rules! full_fun{
() => { fn hello(){} }
}

// Fails with:
// <anon>:13:8: 13:11 error: expected one of `const`, `extern`, `fn`, `type`, or `unsafe`, found `fun`
// <anon>:13 fun!();
macro_rules! trait_macro{
($name:ident) => {
pub trait $name {
fun!();
}
};
}

macro_rules! struct_macro{
($name:ident) => {
pub struct $name;

impl $name {
full_fun!();
}
};
}

// I can add functions to a Impl
struct_macro!{Monster}
// But I cannot add functions to a trait
trait_macro!{Monster}


fn main() {

}

最佳答案

根据 the Rust documentation on macros ,宏可以展开为:

  • 零个或多个项目
  • 零个或多个方法,
  • 一个表达式,
  • 声明,或
  • 一个模式。

您的 full_fun 成为一种方法,但我认为特征内的声明不算数。 (不过,我还没有找到确切的引用)。

即使是,也无济于事:由于宏观卫生规则,定义的 hello 不能在其他地方引用,因为它实际上是一个不同于任何其他标识符的唯一标识符- 即您的 fun!() 宏不会声明与 full_fun!() 实现的相同的功能。

关于rust - Rust 宏在特征定义中起作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37730490/

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