当两个子模块都在同一主模块中时,从另一个子模块访问该子模块 [英] Access submodule from another submodule when both submodules are in the same main module

查看:127
本文介绍了当两个子模块都在同一主模块中时,从另一个子模块访问该子模块的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14),并且具有以下设置:

I'm using rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14) and I've got the following setup:

my_app/
|
|- my_lib/
|   |
|   |- foo
|   |   |- mod.rs
|   |   |- a.rs
|   |   |- b.rs
|   |
|   |- lib.rs
|   |- Cargo.toml
|
|- src/
|   |- main.rs
|
|- Cargo.toml

src/main.rs:

src/main.rs:

extern crate my_lib;

fn main() {
  my_lib::some_function();
}

my_lib/lib.rs:

my_lib/lib.rs:

pub mod foo;

fn some_function() {
  foo::do_something();
}

my_lib/foo/mod.rs:

my_lib/foo/mod.rs:

pub mod a;
pub mod b;

pub fn do_something() {
  b::world();
}

my_lib/foo/a.rs:

my_lib/foo/a.rs:

pub fn hello() {
  println!("Hello world");
}

my_lib/foo/b.rs:

my_lib/foo/b.rs:

use a;
pub fn world() {
  a::hello();
}

Cargo.toml:

Cargo.toml:

[dependencies.my_lib]
path = "my_lib"

当我尝试编译它时,在B.rs中的use语句中抛出以下错误:

When I try to compile it I get the following error thrown for the use statement in B.rs:

unresolved import `A`. There is no `A` in `???`

我想念什么?谢谢.

推荐答案

问题是use路径是绝对路径,而不是相对路径.当您说use A;时,实际上是在说在板条箱的根模块中使用符号A",即lib.rs.

The problem is that use paths are absolute, not relative. When you say use A; what you are actually saying is "use the symbol A in the root module of this crate", which would be lib.rs.

您需要使用的是use super::A;,即完整路径:use foo::A;.

What you need to use is use super::A;, that or the full path: use foo::A;.

我在 Rust的模块系统以及路径如何工作上写了一篇文章,这可能有助于清除如果关于板条箱和模块的锈皮书没有, t.

I wrote up a an article on Rust's module system and how paths work that might help clear this up if the Rust Book chapter on Crates and Modules doesn't.

这篇关于当两个子模块都在同一主模块中时,从另一个子模块访问该子模块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆