如何在Rust的src/bin二进制文件中使用库的私有函数?
在同一Rust Package中让二进制文件调用库私有函数
要实现仅让src/bin/run-foo.rs调用src/lib.rs中的私有函数run_foo,无需将函数对外暴露,可通过以下两种方式实现:
方案一:直接通过#[path]引用lib.rs作为模块
在二进制文件中使用#[path]属性将lib.rs导入为本地模块,这样就能访问其中的私有函数:
// foo_core/src/bin/run-foo.rs #[path = "../lib.rs"] mod foo_core; fn main() { foo_core::run_foo(); }
// foo_core/src/lib.rs fn run_foo() { // 函数逻辑 }
这种方式下,run_foo保持私有状态,不会被库的外部使用者访问到,只有当前二进制文件能通过导入的模块调用它。
方案二:将函数放在私有子模块中
如果lib.rs代码较多,可将run_foo放在私有子模块里,配合pub(super)确保父模块(lib.rs根)能访问,再通过#[path]导入模块调用:
// foo_core/src/lib.rs mod internal { // pub(super) 允许父模块访问,无需对外暴露 pub(super) fn run_foo() { // 函数逻辑 } } // 其他库对外代码...
// foo_core/src/bin/run-foo.rs #[path = "../lib.rs"] mod foo_core; fn main() { foo_core::internal::run_foo(); }
这两种方案都能满足你的需求:既不用将run_foo设为公共接口,又能在指定的二进制文件中调用该函数。
内容的提问来源于stack exchange,提问作者Misha
相关产品推荐
相关产品推荐

