gpt4 book ai didi

module - 如何从私有(private)模块中的公共(public)函数中引用私有(private)类型?

转载 作者:行者123 更新时间:2023-12-03 11:39:52 25 4
gpt4 key购买 nike

我想将类似的功能分组到一个文件中。这些函数需要返回一个不公开的类型:

struct MyStruct;

mod my_mod {
use super::MyStruct;

// There are other, similar functions that also return `MyStruct`
pub fn foo() -> MyStruct {
MyStruct
}
}

fn main() {
let _var = my_mod::foo();
}

这失败并出现错误

error[E0446]: private type `MyStruct` in public interface
--> src/main.rs:7:3
|
1 | struct MyStruct;
| - `MyStruct` declared as private
...
7 | pub fn foo() -> MyStruct { MyStruct }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't leak private type

一般来说,不允许公共(public)函数在其签名中包含私有(private)类型是有意义的,但在这种特定情况下,该结构在模块根级别可用。

有没有办法在不制作 MyStruct 的情况下支持这一点?上市?

最佳答案

我有一种感觉,这个错误是没有根据的。只有在 my_mod 的情况下才会出现错误。是 pub或者如果函数在外部范围内重新导出。

也就是说,我找到了解决方法:移动 MyStruct到同级模块并制作 MyStruct pub,但不是模块。

use types::MyStruct;

mod types {
pub struct MyStruct;
}

mod my_mod {
use super::MyStruct;

pub fn foo() -> MyStruct {
MyStruct
}
}

fn main() {
let _var = my_mod::foo();
}

关于module - 如何从私有(private)模块中的公共(public)函数中引用私有(private)类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61201481/

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