2 个不稳定版本
使用旧的 Rust 2015
0.2.1 | 2018年2月27日 |
---|---|
0.1.1 | 2016年2月5日 |
0.1.0 |
|
#1985 in Rust 模式
46,533 每月下载量
用于 18 个crate (2 个直接使用)
17KB
199 行
SplitMut
一个 Rust 库,用于安全地从同一集合中检索多个可变值。
get2_mut
,get3_mut
和 get4_mut
返回一个元组或 2,3 或 4 个值,每个值都是以下之一
Ok(&mutV)
Err(SplitMutError::NoValue)
如果没有值(即,当你的常规get_mut
会返回None
时)Err(SplitMutError::SameValue)
如果元组中已经返回了相同的值。
将 use splitmut::SplitMut
添加到您的代码中,以便为可变切片、Vec、VecDeque、HashMap 和 BTreeMap 实现这些函数。
示例
extern crate splitmut;
use std::collections::HashMap;
use splitmut::{SplitMut, SplitMutError};
// Create a hashmap
let mut h = HashMap::new();
h.insert(1, "Hello");
h.insert(2, "world");
// Swap two values easily
{
let (m1, m2) = h.get2_mut(&1, &2);
std::mem::swap(m1.unwrap(), m2.unwrap());
}
assert_eq!(h.get(&1), Some(&"world"));
assert_eq!(h.get(&2), Some(&"Hello"));
// Show error handling
let (m0, m1a, m1b) = h.get3_mut(&0, &1, &1);
// No value for the key "0"
assert_eq!(m0, Err(SplitMutError::NoValue));
// First value for the key "1" is returned successfully
assert_eq!(m1a, Ok(&mut "world"));
// Second value for the key "1" returns an error
assert_eq!(m1b, Err(SplitMutError::SameValue));