Rust 中是否有一种数据结构具有以下类型的函数签名?
impl<K, V> Map<K,V> {
fn insert(self, key: K, value: V) -> Self
}
即它不采用对其自身的可变引用,而是采用所有权(如构建器模式)。
灵感主要来自于Haskell Map
之类的东西正如评论中已经提到的,您可以创建一个在内部使用
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);
}