あるモジュールに属する関数を別のモジュールから呼び出そうとしています (コードのファクタリング、編成などのために)。
これが私のクレート構造です:
➜ mod_test git:(master) ✗ tree
.
├── Cargo.lock
├── Cargo.toml
└── src
├── bin
│ └── one.rs
├── lib
│ └── two.rs
└── main.rs
3 directories, 5 files
私はmain
宣言します:
pub mod bin {
pub mod one;
}
pub mod lib {
pub mod two;
}
これらすべてのファイルには、単純に trivial が含まれていますpub fn main() {println!("hello");}
。
この時点で、すべて問題ありません。
では、から呼び出すことはできますか?lib::two::main
bin/one.rs
use crate::lib::two;
、 、のいずれも作業use super::lib::two;
にuse self::super::lib::two;
追加されませんでしbin/one.rs
た。
編集: 私は:
rustc 1.42.0 (b8cedc004 2020-03-09)
Linux 5.3.0-45-generic にインストールしました。編集2:
super
キーワードを使用するたびに、次の不思議なエラーが発生しますrustc
:
error[E0433]: failed to resolve: there are too many leading `super` keywords
これに関するトラブルシューティングはどこにもありません。
編集 3:モジュール構造の宣言に
lib.rs
ファイルを追加し、書き込みを行いますが、:src
lib
use mod_test::lib::two;
one.rs
1)クレートで「ダムモジュール宣言ファイル」を増やさないという考えを無効にします。
main.rs
2) 2 つの異なる場所 (とlib.rs
)でまったく同じ情報を文字通りコピーする必要があります。3)
use mod_test::lib::two;
は唯一の機能する構文です。crate
またはsuper
キーワードを使用すると、難解なコンパイラ エラーが発生します。