首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能通过‘std’导入`std::assert` `,而它对来自std的其他宏起作用?

为什么我不能通过‘std’导入`std::assert` `,而它对来自std的其他宏起作用?
EN

Stack Overflow用户
提问于 2019-03-31 18:28:29
回答 1查看 283关注 0票数 4

使用Rust 2018,此代码工作(游乐场):

代码语言:javascript
复制
use std::panic;
use std::format;
use std::assert_eq;

但这一点:

代码语言:javascript
复制
use std::assert;

导致此错误:

代码语言:javascript
复制
error[E0432]: unresolved import `std::assert`
 --> src/lib.rs:4:5
  |
4 | use std::assert;
  |     ^^^^^^^^^^^ no `assert` in the root

我读过关于这个主题的版本指南,它说use应该与macro_rules!宏和过程宏一起工作。因此,我很困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-31 18:49:12

use应该与macro_rules!宏和过程宏一起工作。

除了assert这两个都不是

/内置宏到编译器本身。/这些宏没有任何与macro\_rules! /宏相对应的定义,但在这里有文档说明。它们的实现可以找到硬编码/到lib语法本身。

这是一个编译器内置

代码语言:javascript
复制
#[stable(feature = "rust1", since = "1.0.0")]
#[rustc_doc_only_macro]
macro_rules! assert {
    ($cond:expr) => ({ /* compiler built-in */ });
    ($cond:expr,) => ({ /* compiler built-in */ });
    ($cond:expr, $($arg:tt)+) => ({ /* compiler built-in */ });
}

其他人造宏包括:

  • compile_error
  • format_args
  • env
  • option_env
  • concat_idents
  • concat
  • line
  • column
  • file
  • stringify
  • include_str
  • include_bytes
  • module_path
  • cfg
  • include

assert的实际定义在ext/assert.rs中要低得多。

稳定2018年锈蚀的均匀路径(#56417)顺便提到了以下几点:

内置宏,例如use env。当前由于内置宏的一些(可修复的)实现细节而导致的错误。在稳定之前(删除错误后)没有要解决的已知问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55444086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档