Rust:没有副作用的地图?在插入时获取所有权(而不是可变引用)的映射?

问题描述 投票:0回答:1

Rust 中是否有一种数据结构具有以下类型的函数签名?

impl<K, V> Map<K,V> {
  fn insert(self, key: K, value: V) -> Self
}

即它不采用对其自身的可变引用,而是采用所有权(如构建器模式)。

灵感主要来自于Haskell Map

之类的东西
rust ownership
1个回答
0
投票

正如评论中已经提到的,您可以创建一个在内部使用

std::collections::HashMap
的新类型。这是一个基本示例:

use std::collections::HashMap;
use std::ops::Deref;

#[derive(Debug)]
struct Map<K, V>(HashMap<K, V>);

impl<K, V> Deref for Map<K, V> {
    type Target = HashMap<K, V>;

    fn deref(&self) -> &Self::Target {
        &self.0
    }
}

impl<K, V> Map<K, V>
where
    K: std::hash::Hash + Eq,
{
    pub fn new() -> Self {
        Map(HashMap::new())
    }

    pub fn insert(mut self, key: K, value: V) -> Self {
        self.0.insert(key, value);

        self
    }
}

fn main() {
    let map = Map::new()
        .insert("a", "A")
        .insert("b", "B")
        .insert("c", "C");

    println!("{:?}", map);
    println!("{:?}", *map);
}

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=61eb137defe2aceef7e748f52c0037b7

© www.soinside.com 2019 - 2024. All rights reserved.