Rust 出口板条箱,但;使用「;抛出编译错误

Rust 出口板条箱,但;使用「;抛出编译错误,rust,rust-cargo,Rust,Rust 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] u

在货物方面,我有:

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]

和类似的指令。

虽然可以将
外部板条箱
指令放入任何模块,但将其放入板条箱根目录(通常是
lib.rs
main.rs
)更为习惯,也更为方便。然后您的
use
语句将像现在一样工作

出现此问题的原因是您已将
外部板条箱postgres
放置到根板条箱的一个子模块:

mod submodule {
    extern crate postgres;

    use postgres::...;
}

这意味着
postgres
模块的完整路径将是
submodule::postgres
,而不仅仅是
postgres
(请记住,
use
指令中的路径默认为绝对路径),因此您应该使用
use submodule::postgres::which
使用self::postgres::whatever
(后一种形式是
use
语句中的相对路径示例)。但是,正如我之前所说,这不是惯用的,应该避免。

虽然可以将
extern-crater
指令放在任何模块上,但将其放在板条箱根目录下(通常是
lib.rs
main.rs
)更惯用,也更方便。然后您的
use
语句将像现在一样工作

出现此问题的原因是您已将
外部板条箱postgres
放置到根板条箱的一个子模块:

mod submodule {
    extern crate postgres;

    use postgres::...;
}

这意味着
postgres
模块的完整路径将是
submodule::postgres
,而不仅仅是
postgres
(请记住,
use
指令中的路径默认为绝对路径),因此您应该使用
use submodule::postgres::which
使用self::postgres::whatever
(后一种形式是
use
语句中的相对路径示例)。然而,正如我之前所说,这不是惯用的,应该避免
lib.rs
main.rs
中?您是否放置了
外部板条箱postgreslib.rs
main.rs
中的code>?这里需要注意的一点是
use
root
相关,而其他路径与
self
相关。这对新手来说是非常混乱的。这里的一个警告是
使用
是相对于
,而其他路径是相对于
自身
。这对新来者来说是非常令人困惑的。