< 返回版块

Neutron3529 发表于 2020-10-08 23:31

刚刚看到自己信箱里多了一封信件

信件如下:


您好,

我是(Xidorn Quan),是Rust社区调查简体中文版问卷的负责人。

我在翻译Rust社区调查问卷的回复的时候,注意到您提出的这一问题:

数组[T;N]和数组[T;M]当N,M不相等时不能被视为同一类型,这极大地增加了定义常量的复杂性。比如我希望把下列数组记录在程序中:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1],...]我将不得不使用Vec,然而编译器不允许我们定义Vec类型的常量( allocation not allowed in constants)而如果直接使用数组存储,也会报错(expected an array with a fixed size of 1 element, found one with 2 elements)对于这种长度不同的数组,Rust并没有提供一种合适的数据结构,而我们不得不使用普通的Vec,让程序在开始运行时候计算这个二维Vec

对于数组来说,长度是编码在类型里的,而不定长的“数组”在Rust里称为切片(slice),是可以在常量里定义的。比如您提到的这个数据可以这样定义:

const PASCAL: &[&[i32]] = &[ &[1], &[1, 1], &[1, 2, 1], &[1, 3, 3, 1], &[1, 4, 6, 4, 1], ]; 这样您就不需要使用Vec,也不需要在运行时计算了。

希望这能给你提供帮助。

如果您有更多问题,可以加入一些Rust中文社区的讨论群或论坛。在Telegram上有一个由我直接管理的非常活跃和专注的讨论群“Rust众”(https://t.me/rust_zh),此外也有一些由社区里的其他志愿者管理的QQ群和微信群(如果需要的话我可以向相关人员咨询并给您一份列表),还有社区论坛(https://rustcc.cn/),相信在社区里类似这样的问题会有很多人愿意为您解答。

此致


(已经隐去真名)

(真的是第一次收到问卷调查的回复)

(相当感谢Xidorn Quan的无私帮助)

评论区

写评论
whfuyn 2020-10-09 20:41

赞!

pinylin 2020-10-09 11:41
  • 👍
1 共 2 条评论, 1 页