6

あるモジュールに属する関数を別のモジュールから呼び出そうとしています (コードのファクタリング、編成などのために)。

これが私のクレート構造です:

➜  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.rs

    1)クレートで「ダムモジュール宣言ファイル」を増やさないという考えを無効にします。

    main.rs2) 2 つの異なる場所 (とlib.rs)でまったく同じ情報を文字通りコピーする必要があります。

    3)use mod_test::lib::two;は唯一の機能する構文です。crateまたはsuperキーワードを使用すると、難解なコンパイラ エラーが発生します。

4

1 に答える 1