1 个不稳定版本
0.1.0 | 2022 年 9 月 26 日 |
---|
#48 在 #borrow
482 每月下载量
用于 10 个 crate (6 直接)
6KB
50 行
从同一数组中获取两个元素的可变引用是困难的。这个小巧的库提供了一种使它更容易的方法。
[array_mut_ref!] 检查用户在运行时是否借用了相同的元素。
use arref::array_mut_ref;
let mut arr = vec![1, 2, 3, 4];
let (a, b) = array_mut_ref!(&mut arr, [1, 2]);
assert_eq!(*a, 2);
assert_eq!(*b, 3);
let (a, b, c) = array_mut_ref!(&mut arr, [1, 2, 0]);
assert_eq!(*c, 1);
// ⚠️ The following code will panic. Because we borrow the same element twice.
// let (a, b) = array_mut_ref!(&mut arr, [1, 1]);
或者,您可以使用 [mut_twice]。如果再次借用相同的元素,它不会引发恐慌。它将返回一个 Err(&mut T)
。
use arref::mut_twice;
let mut arr = vec![1, 2, 3];
let (a, b) = mut_twice(&mut arr, 1, 2).unwrap();
assert_eq!(*a, 2);
assert_eq!(*b, 3);
let result = mut_twice(&mut arr, 1, 1);
assert!(result.is_err());
if let Err(v) = result {
assert_eq!(*v, 2);
}
lib.rs
:
从同一数组中获取两个元素的可变引用是困难的。这个小巧的库提供了一种使它更容易的方法。
[array_mut_ref!] 检查用户在运行时是否借用了相同的元素。
use arref::array_mut_ref;
let mut arr = vec![1, 2, 3, 4];
let (a, b) = array_mut_ref!(&mut arr, [1, 2]);
assert_eq!(*a, 2);
assert_eq!(*b, 3);
let (a, b, c) = array_mut_ref!(&mut arr, [1, 2, 0]);
assert_eq!(*c, 1);
// ⚠️ The following code will panic. Because we borrow the same element twice.
// let (a, b) = array_mut_ref!(&mut arr, [1, 1]);
或者,您可以使用 [mut_twice]。如果再次借用相同的元素,它不会引发恐慌。它将返回一个 Err(&mut T)
。
use arref::mut_twice;
let mut arr = vec![1, 2, 3];
let (a, b) = mut_twice(&mut arr, 1, 2).unwrap();
assert_eq!(*a, 2);
assert_eq!(*b, 3);
let result = mut_twice(&mut arr, 1, 1);
assert!(result.is_err());
if let Err(v) = result {
assert_eq!(*v, 2);
}