如何在Rust中像Go的make()那样声明空切片?
在Rust中创建预分配容量的空Vec(对应Go的make切片写法)
Go中的players := make([]Player, 0, len(player_list))作用是:创建一个长度为0、预分配容量等于player_list长度的空切片,目的是提前预留足够内存,避免后续追加元素时频繁触发内存扩容。
在Rust里,对应的实现是使用Vec::with_capacity方法,它会创建一个空的Vec(长度为0),同时预分配指定大小的内存空间,完全匹配Go代码的意图:
let mut players: Vec<Player> = Vec::with_capacity(player_list.len());
为什么你之前的写法错误?
你尝试的vec!(Player; 0; player_list.len())是错误的用法:
- Rust的
vec!宏没有三参数的形式,正确的重复元素写法是vec!(元素值, 重复次数); - 即使写法正确,
vec!(Player; 0)也没必要——空Vec不需要创建任何Player实例,我们只需要预分配内存空间,Vec::with_capacity才是做这件事的正确方式。
内容的提问来源于stack exchange,提问作者Fred Hors
相关产品推荐
相关产品推荐

