gpt4 book ai didi

rust - `dyn` 与绝对路径一起使用时出现错误 [E0433]

转载 作者:行者123 更新时间:2023-11-29 07:47:38 24 4
gpt4 key购买 nike

我在玩 Rust 1.27 中引入的 dyn 特性时偶然发现了这个编译器错误:

error[E0433]: failed to resolve. Use of undeclared type or module `dyn`
--> src\main.rs:1:30
|
1 | fn _run0() -> Result<(), Box<dyn ::std::error::Error>> { Ok(()) }
| ^^^ Use of undeclared type or module `dyn`

所有其他变体都可以正常编译:

fn _run0() -> Result<(), Box<dyn ::std::error::Error>> { Ok(()) } // Error

fn _run1() -> Result<(), Box<dyn std::error::Error>> { Ok(()) } // Ok

fn _run2() -> Result<(), Box<::std::error::Error>> { Ok(()) } // Ok

这是有意的行为吗?


rustc 1.27.0 (3eda71b00 2018-06-19)

最佳答案

这是 dyn 是上下文关键字这一事实的向后兼容性“陷阱”。在添加新语法之前,您可以编写使用 dyn 作为模块名称的代码:

mod dyn {
pub trait Error {}
}

fn example() -> Box<dyn ::Error> {
// ^ space doesn't matter
unimplemented!()
}

不能停止编译,因此必须将其解析为路径组件。

你可以添加括号来明确:

fn example() -> Box<dyn (::dyn::Error)> { /* ... */ }

在 2018 版中,您可以在路径的开头使用 crate:

fn example() -> Box<dyn crate::dyn::Error> { /* ... */ }

关于rust - `dyn` 与绝对路径一起使用时出现错误 [E0433],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51071925/

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