我正在做这样的事情:
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中有更好、更直接或更惯用的方法吗?
将对问题的评论扩展为完整答案:
slice
方法copy_from_slice
将起作用。
因为数组[T; N]
实现了AsMut<[T]>
*(也就是说,对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
将死机。
*完全公开:[T; N]
也实现了BorrowMut<T>
,虽然我很确定AsMut
是这里的特性,但我不能100%确定它不是BorrowMut
。