尝试在Rust的私有模块中使用私有方法时出现E0624

uinbv5nw  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(129)

假设我有一个带有内部公共结构Bar的模块foo
现在,Bar有一些函数应该是私有的,假设它们是相当低级的函数,需要构建一些更大的公共函数。
假设我们有以下文件结构

src/
├─ foo/
│  ├─ private_module.rs // private module with private functions
├─ foo.rs
├─ lib.rs // Public API

crate::foo::private_module中,我们有以下内容

impl Bar {
    fn my_private_function() -> () {}
}

crate::foo中我们有以下内容

mod private_module;

struct Bar;

impl Bar {
    pub fn my_public_function(&self) -> () {
        self.my_private_function() // E0624! private associated function
    }
}

正确的方法是什么?唯一的解决方法是将这些私有函数公开,这将在这个结构体的公共API中暴露它们,尽管impl块位于私有模块中!
我是否应该将低级私有函数放在模块的根,而将高级公共函数放在它们自己的子模块中?

mqkwyuun

mqkwyuun1#

Visibility and Privacy文档有许多不同的可见性级别可以使用,例如pub(super)只向其父模块公开项目。

struct Bar;

impl Bar {
    pub(super) fn my_private_function() -> () {}
}

相关问题