小编use*_*300的帖子

如果从模块导出的项目暴露了内部代码,如何组织内部代码?

我正在开发一个 Rust 模块,它有一个小的外部接口,但它的内部实现又大又复杂。

是否有一种明智的方法可以避免拥有包含模块所有代码的巨大文件,同时仍然向外部模块使用者公开一个小接口?

AFAIK,Rust 不允许您对同一模块使用多个文件,例如 Go 允许使用包目录。Rust 模块定义在一个目录中并不重要,它仍然需要一个文件。

这样,为了拆分代码,您必须使用子模块来表示您想要拆分的子类型或实现细节。我知道对于编译的代码来说应该没什么影响,模块组织的所有开销都被删除了。

但是存在一个设计问题,如果我将内容拆分为模块,那么这些内容将需要导出内容,以便我可以从其他模块中使用它们......但是这些“导出的内部组件”也可以由外部消费者使用,对吧?有没有办法避免暴露这些内部接口?

implementation module interface rust

2
推荐指数
1
解决办法
570
查看次数

如何在 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)[..]将为您提供一个具有给定容量的不可变空切片,这不是很有用。

slice dynamic-memory-allocation rust

1
推荐指数
1
解决办法
1363
查看次数