一个 crate 被导出但是 "use" 抛出编译错误
A crate is exported but "use" throws compilation errors
在 Cargo 中我有这个:
postgres = "0.11.7"
并且在一个子模块中 *.rs
extern crate postgres;
use postgres::{Connection, Error, FromSql, SslMode};
use postgres::Result as PgResult;
编译错误:
error: unresolved import `postgres::Connection`. Did you mean `self::postgres`? [E0432]
unresolved import `postgres::Error`. Did you mean `self::postgres`? [E0432]
error: unresolved import `postgres::SslMode`. Did you mean `self::postgres`? [E0432]
和类似的。
虽然可以将 extern crate
指令放入任何模块,但将其放入 crate root 更符合习惯也更方便,通常 lib.rs
或 main.rs
。然后你的 use
语句将像现在一样工作。
出现此问题的原因是您将 extern crate postgres
放入了 root crate 的子模块之一:
mod submodule {
extern crate postgres;
use postgres::...;
}
这意味着 postgres
模块的完整路径将是 submodule::postgres
,而不仅仅是 postgres
(请记住,use
指令中的路径默认是绝对路径),因此您应该使用 use submodule::postgres::whatever;
或 use self::postgres::whatever;
(后一种形式是 use
语句中相对路径的示例)。但是,正如我之前所说,这不是惯用的,应该避免。
在 Cargo 中我有这个:
postgres = "0.11.7"
并且在一个子模块中 *.rs
extern crate postgres;
use postgres::{Connection, Error, FromSql, SslMode};
use postgres::Result as PgResult;
编译错误:
error: unresolved import `postgres::Connection`. Did you mean `self::postgres`? [E0432]
unresolved import `postgres::Error`. Did you mean `self::postgres`? [E0432]
error: unresolved import `postgres::SslMode`. Did you mean `self::postgres`? [E0432]
和类似的。
虽然可以将 extern crate
指令放入任何模块,但将其放入 crate root 更符合习惯也更方便,通常 lib.rs
或 main.rs
。然后你的 use
语句将像现在一样工作。
出现此问题的原因是您将 extern crate postgres
放入了 root crate 的子模块之一:
mod submodule {
extern crate postgres;
use postgres::...;
}
这意味着 postgres
模块的完整路径将是 submodule::postgres
,而不仅仅是 postgres
(请记住,use
指令中的路径默认是绝对路径),因此您应该使用 use submodule::postgres::whatever;
或 use self::postgres::whatever;
(后一种形式是 use
语句中相对路径的示例)。但是,正如我之前所说,这不是惯用的,应该避免。