Rust 使用Vec的含义是什么<;T>;超额期权<;Vec<;T>>;?

Rust 使用Vec的含义是什么<;T>;超额期权<;Vec<;T>>;?,rust,Rust,我使用Option而不是Vec创建了许多结构,以便在不需要时不分配内存。我查了一下Vec和Option>的大小,两者都是一样的 所以我的问题是。我应该使用Vec并检查其.len()是否具有相同的效果,还是继续使用选项?或者它们是等价的 我最初也是一名JavaScript开发人员。以及让偏执狂过来分配或不分配。一个空的Vec不会分配,因为它没有什么可存储的 由于编译器使用了优化,这两个类型的大小相同,但这与类型的含义无关。即使进行了这种优化,空的Vec和None也不是一回事。一个表示存在空的Vec

我使用
Option
而不是
Vec
创建了许多结构,以便在不需要时不分配内存。我查了一下
Vec
Option>
的大小,两者都是一样的

所以我的问题是。我应该使用
Vec
并检查其
.len()
是否具有相同的效果,还是继续使用
选项
?或者它们是等价的


我最初也是一名JavaScript开发人员。以及让偏执狂过来分配或不分配。

一个空的
Vec
不会分配,因为它没有什么可存储的


由于编译器使用了优化,这两个类型的大小相同,但这与类型的含义无关。即使进行了这种优化,空的
Vec
None
也不是一回事。一个表示存在空的
Vec
,另一个表示根本不存在任何
Vec
。根据具体的操作,区别可能很重要。

这意味着值应该存储在表示其语义的类型中?这就是我的案例,它引出了一个简单的
Vec
。谢谢我认为它被分配的另一个原因是因为它存储指针,len等等,而没有一个是简单的
null
,它什么都不是。@csharad:它消耗空间,是的,但它消耗的空间量与所有
Vec
消耗的空间量相同,并且它不支持分配。从纯粹的设计角度来看,我认为,对于可能存在或可能不存在的单个项目(并且本质上没有“无”表示),以及集合的空集合(因为空集合本身意味着“无”),使用
选项通常更为惯用。例如,如果
字符串
为空,则返回空的
Vec
,而不是
None
。特别是在您的情况下,如果以后将项目添加到
Vec
,则需要将
选项
None
转换为struct。您不应该检查
.len()
,而应该检查
.is\u empty()
。见