我知道$crate
变量是什么,但据我所知,它不能在程序宏中使用。还有另一种方法可以达到类似的效果吗?
我有一个例子,大致要求我用quote和夜间Rust
写这样的东西quote!(
struct Foo {
bar: [SomeTrait;#len]
}
)
我需要确保SomeTrait
在范围内(#len
引用了一个超出代码段范围的整数)。
我在夜间使用过程宏和使用引用和同步,因为proc-macro-hack
对我不起作用。 This is the example我正试图概括。
答案 0 :(得分:4)
根据https://github.com/rust-lang/rust/issues/38356#issuecomment-412920528的回复,似乎没有办法(截至2018-08年)做到这一点,既没有明确引用proc宏板条箱,也没有明确引用任何其他板条箱。 / p>
答案 1 :(得分:1)
在2015版(经典的Rust)中,您可以执行此操作(但它很hacky):
::defining_crate::SomeTrait
defining_crate
的第三方包装箱内,上述方法可以正常工作在defining_crate
本身中,在根目录中添加一个模块:
mod defining_crate { pub use super::*; }
在2018版中,甚至需要更多骇人听闻的解决方案(请参见this issue),尽管#55275可以为我们提供一种简单的解决方法。
答案 2 :(得分:1)
从Rust 1.34开始,您可以使用extern my_crate as self
,然后使用my_crate::Foo
代替$crate::Foo
。
https://github.com/rust-lang/rust/issues/54647
https://github.com/rust-lang/rust/pull/57407
(信用:Neptunepink ## rust irc.freenode.net)