我在Rust中有一个crate foo_core
,并试图在foo_core/src/bin
中的一个二进制文件中使用一个函数:
// foo_core/src/bin/run-foo.rs
use crate::run_foo;
fn main() {
run_foo();
}
// foo_core/src/lib.rs
fn run_foo() {}
遗憾的是,这并不符合
error[E0433]: failed to resolve: could not find `run_foo` in the crate root
更改为pub fn run_foo()
和use foo_core::run_foo
是一个不合适的选择,因为我仍然很高兴只能在run-foo.rs
中使用run_foo
,而不会在库接口中公开它。我能做到这一点吗?
1条答案
按热度按时间umuewwlo1#
我能做到这一点吗?
不可以。其他板条箱,即使在同一个包中,也只能使用库的公共API。
然而,将项目公开但隐藏是很常见的:
这样,它在技术上是公开的,但不会显示在文档中。你也可以把它放在一个
mod unstable_internals_please_do_not_use_this
,如果你想让它很明显,它不被使用。(有些人可能会,但你至少传达了“如果它坏了不是我的错”。)你也可以使用条件编译将它 * 有条件地 * 公开,但这意味着你必须使用
cargo build run-foo --features run_foo_is_public
,这是一个痛苦,库用户仍然可以决定为自己启用该功能。