gpt4 book ai didi

rust - pub 和 pub(super) 什么时候有不同的语义?

转载 作者:行者123 更新时间:2023-12-03 11:26:47 27 4
gpt4 key购买 nike

Rust 支持 pubpub(super) . pub使父模块可以访问项目...和pub(super)似乎也做同样的事情。我试过玩下面的例子,并交换 pubpub(super)似乎没有效果:

#![allow(dead_code)]

mod outer {
pub(super) fn outer_foo() { inner::inner_foo(); }
mod inner {
pub(super) fn inner_foo() { println!("hello world!"); }
}
}

fn top_level_foo() { outer::outer_foo(); }
为什么你会使用一个而不是另一个?
Playground link.

最佳答案

在您的示例中,如果您更改 inner模块要公开,那么差异就会变得清晰。
例如,这是因为 outer::inner::inner_foo从主模块可见:

#![allow(dead_code)]

mod outer {
pub(super) fn outer_foo() { inner::inner_foo(); }
pub mod inner {
pub fn inner_foo() { println!("hello world!"); }
}
}

fn top_level_foo() { outer::outer_foo(); }

fn main() {
outer::inner::inner_foo();
}
如果您保留 inner_foopub(super)它只能从 outer 中看到模块(因为 super 指的是 super 模块, outerinner 内部的情况下),因此上面的代码不会编译,你会看到这个错误:
   |
13 | outer::inner::inner_foo();
| ^^^^^^^^^ private function
|
note: the function `inner_foo` is defined here
请注意 pub也可以拍 crate作为参数,将函数在 crate 本身内公开,但不对其他 crate 公开。

关于rust - pub 和 pub(super) 什么时候有不同的语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65757052/

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