#可变 #引用 #mut #分割 #ref #多值

splitmut

安全地从同一集合中检索多个可变值

2 个不稳定版本

使用旧的 Rust 2015

0.2.1 2018年2月27日
0.1.1 2016年2月5日
0.1.0 2016年2月4日

#1985 in Rust 模式

Download history 5269/week @ 2024-03-24 7720/week @ 2024-03-31 6913/week @ 2024-04-07 7626/week @ 2024-04-14 8873/week @ 2024-04-21 5761/week @ 2024-04-28 10435/week @ 2024-05-05 12711/week @ 2024-05-12 9074/week @ 2024-05-19 11355/week @ 2024-05-26 14088/week @ 2024-06-02 9194/week @ 2024-06-09 9689/week @ 2024-06-16 10525/week @ 2024-06-23 10503/week @ 2024-06-30 15517/week @ 2024-07-07

46,533 每月下载量
用于 18 个crate (2 个直接使用)

Apache-2.0/MIT

17KB
199

SplitMut

一个 Rust 库,用于安全地从同一集合中检索多个可变值。

API 文档 Crates.io

get2_mutget3_mutget4_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));

无运行时依赖