我正在做这样的事情:
type HashId = [u8; 32]; fn fill_hash_id(hash_id: &mut HashId, hash_data: &[u8]) { for i in 0..32 { hash_id[i] = hash_data[i]; } () }
在《 rust 》中,有没有更好、更直接或更地道的方式来表达这一点?
ovfsdjhp1#
要将问题的注解扩展为完整答案:slice方法copy_from_slice将起作用。因为数组[T; N]实作AsMut<[T]> *(也就是说,对T的可变数组的指涉可以视为T的可变 slice),所以您可以在数组上呼叫这个方法。
slice
copy_from_slice
[T; N]
AsMut<[T]>
T
type HashId = [u8; 32]; fn main() { let mut hash_id: HashId = [0u8; 32]; let hash_data = vec![1u8; 32]; hash_id.copy_from_slice(&hash_data); println!("{:?}", &hash_id); // bunch of '1's }
但要小心;如果目标和接收器的长度不同,copy_from_slice将出现混乱。
BorrowMut<T>
AsMut
BorrowMut
1条答案
按热度按时间ovfsdjhp1#
要将问题的注解扩展为完整答案:
slice
方法copy_from_slice
将起作用。因为数组
[T; N]
实作AsMut<[T]>
*(也就是说,对T
的可变数组的指涉可以视为T
的可变 slice),所以您可以在数组上呼叫这个方法。但要小心;如果目标和接收器的长度不同,
copy_from_slice
将出现混乱。[T; N]
还实现了BorrowMut<T>
,虽然我 * 相当 * 肯定AsMut
是这里起作用的特性,但我不能100%肯定它不是BorrowMut
。