gpt4 book ai didi

module - 不能使用 "super"来引用由 "use"从另一个 crate 引入的名称

转载 作者:行者123 更新时间:2023-11-29 08:12:51 25 4
gpt4 key购买 nike

我在模块内使用 super 来引用父 namespace 中的名称。但是,当我引用父 namespace 中的名称时,我无法使它工作,该名称是通过 use 语句引入的。我做错了什么?

// crate mylib

pub fn lib_hello() {println!("Hello from mylib!");}


// crate mybin

extern crate mylib;
use mylib::lib_hello;

fn local_hello() {println!("Hello from here!");}

mod mymod {
fn f() { super::local_hello() } // Ok
fn g() { super::lib_hello() } // error: unresolved name `super::lib_hello`
}

fn main() {
lib_hello(); // Ok
}

编辑:从 local_hello 中删除 pub

进一步说明我的问题:函数 local_hello() 在 crate 命名空间中被声明为私有(private)的。函数 lib_hello()use 一起引入,并且也成为 crate 命名空间中的私有(private)名称。此时名称 local_hellolib_hello 具有同等地位:它们都在 crate 命名空间中,并且都是私有(private)的。在 mymod 中,我使用 super 来引用 crate 命名空间,并且可以访问 local_hello 但不能访问 lib_hello。给了什么?

我了解 Python 和 C++ 命名空间。也许我需要忘记一些关键点?

最佳答案

use 语句只导入到本地范围。如果要重新导出,请使用 pub use

// crate mylib

pub fn lib_hello() {println!("Hello from mylib!");}


// crate mybin

extern crate mylib;
pub use mylib::lib_hello;

pub fn local_hello() {println!("Hello from here!");}

mod mymod {
fn f() { super::local_hello() } // Ok
fn g() { super::lib_hello() } // error: unresolved name `super::lib_hello`
}

fn main() {
lib_hello(); // Ok
}

pub use 将使项目看起来像是存在于从中重新导出的模块中。

关于module - 不能使用 "super"来引用由 "use"从另一个 crate 引入的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30440713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com