【发布时间】:2020-04-04 22:47:02
【问题描述】:
let some_datagram [u8; 8] = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
let a : &[u8; 2] = some_datagram[0..2];
let b : &[u8; 4] = some_datagram[2..6];
let c : &[u8; 2] = some_datagram[6..8];
上面的行不通,因为some_datagram[0..2] 是&[u8],而不是&[u8; 2]。这在使用其他类型的Range* 时非常有意义,因为在编译时开始/结束点是未知的。我知道有一个将TryInto 用于&[u8] 到&[u8; n] 的实现,但是由于这在编译时就已经知道了,所以我不得不处理我知道不可能发生的错误情况。
除了[] 之外还有其他方法可以返回一个固定大小的数组吗?可能是标准宏?
【问题讨论】:
-
“我不得不处理我知道不可能发生的错误情况”。这就是
.unwrap和.expect的用途。由于编译器在何时允许转换方面存在不一致的规则,实际上没有任何其他方式可以表达这一点。 -
@Brian “真的没有任何其他方式可以表达这一点”,有,但它超级丑陋。
&[some_datagram[0], some_datagram[1]]是&[u8; 2]- 但如果语言能给你一些语法糖就更好了。