我正在开发一个 Rust 模块,它有一个小的外部接口,但它的内部实现又大又复杂。
是否有一种明智的方法可以避免拥有包含模块所有代码的巨大文件,同时仍然向外部模块使用者公开一个小接口?
AFAIK,Rust 不允许您对同一模块使用多个文件,例如 Go 允许使用包目录。Rust 模块定义在一个目录中并不重要,它仍然需要一个文件。
这样,为了拆分代码,您必须使用子模块来表示您想要拆分的子类型或实现细节。我知道对于编译的代码来说应该没什么影响,模块组织的所有开销都被删除了。
但是存在一个设计问题,如果我将内容拆分为模块,那么这些内容将需要导出内容,以便我可以从其他模块中使用它们......但是这些“导出的内部组件”也可以由外部消费者使用,对吧?有没有办法避免暴露这些内部接口?
我看到回复告诉你使用Vec::with_capacity(some_size);,但感觉很奇怪。
为什么需要使用 Vector 来获取切片?我不想稍后增加切片,我只想使用普通切片,但大小在运行时是已知的,因为它来自某些程序输入。
我当前的解决方案是:
let mutable_zeroed_slice: &mut [u8] = &mut vec![0; size][..];
Run Code Online (Sandbox Code Playgroud)
有没有更好、更惯用且不费解的?
更新:您不能在包装在函数中之前使用该技巧,因为返回时您将丢失切片引用。
更新2:正如第一个回复中所指出的,Vec::with_capacity(size)[..]将为您提供一个具有给定容量的不可变空切片,这不是很有用。