あるモジュールに属する関数を別のモジュールから呼び出そうとしています (コードのファクタリング、編成などのために)。
これが私のクレート構造です:
➜ 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::mainbin/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ファイルを追加し、書き込みを行いますが、:srclibuse mod_test::lib::two;one.rs1)クレートで「ダムモジュール宣言ファイル」を増やさないという考えを無効にします。
main.rs2) 2 つの異なる場所 (とlib.rs)でまったく同じ情報を文字通りコピーする必要があります。3)
use mod_test::lib::two;は唯一の機能する構文です。crateまたはsuperキーワードを使用すると、難解なコンパイラ エラーが発生します。