刚刚看到自己信箱里多了一封信件
信件如下:
您好,
我是(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的无私帮助)
评论区
写评论赞!