I don't see why the HashMap.entry(..) method
pub fn entry(&mut self, key: K) -> Entry<K, V>
requires that the lookup parameter key be of type K and not some type Q where K: Borrow<Q>, akin to HashMap.get(..):
pub fn get<Q: ?Sized>(&self, k: &Q) -> Option<&V>
where
K: Borrow<Q>,
Q: Hash + Eq,
Given a HashMap<String, Foo>, just as a lookup can be performed with an &str parameter, it should be possible to obtain a HashMap::Entry<K, V> without requiring a full-blown instance of K be passed in to .entry(...).
i.e. the following code should work:
use std::collections::HashMap;
fn main() {
let mut map = HashMap::new();
map.insert("Foo".to_owned(), "Bar".to_owned());
{
// read-only reference to the result:
let bar = map.get("Foo");
assert!(bar.is_some());
}
{
// why should this not be allowed?
let bar = map.entry("Foo");
}
}
Which currently returns the following:
error[E0308]: mismatched types
--> ./test.rs:16:29
|
16 | let bar = map.entry("Foo");
| ^^^^^
| |
| expected struct `std::string::String`, found reference
| help: try using a conversion method: `"Foo".to_string()`
|
= note: expected type `std::string::String`
found type `&'static str`
error: aborting due to previous error
I don't see why the
HashMap.entry(..)methodrequires that the lookup parameter
keybe of typeKand not some typeQwhereK: Borrow<Q>, akin toHashMap.get(..):Given a
HashMap<String, Foo>, just as a lookup can be performed with an&strparameter, it should be possible to obtain aHashMap::Entry<K, V>without requiring a full-blown instance ofKbe passed in to.entry(...).i.e. the following code should work:
Which currently returns the following: