Я новичок в ржавчине, и я только что узнал о черте Borrow
.
Из того, что я понимаю, черта Borrow
предоставляет функцию borrow
, которая работает так же, как заимствование (то есть &
), но вы также можете использовать его в обобщенных c ограничениях (чего нельзя сделать с обычным синтаксисом заимствования).
У меня есть эта функция
pub fn get<Q>(&self, key: &Q) -> Option<&V>
where K: Borrow<Q>,
Q: Hash + Eq + ?Sized
{
let bucket = self.bucket_key(key);
self.buckets[bucket].iter().find(|&(ref ekey, _)| ekey.borrow() == key).map(|&(_, ref v)| v)
}
(я смотрел видео Джона Дженгсета на YouTube)
И для меня странно, что мы ограничиваем тип K
, который определен в структуре, чтобы действовать как Borrow<Q>
.
Поэтому мне было интересно, что именно это ограничение говорит о K
и Q
.
Означает ли это, что мы K
заставляем себя вести себя как Borrow<Q>
или K
исправлено здесь (поскольку оно уже было определено в структуре), и мы ограничиваем Q
(и за кулисами Rust преобразует его в нечто вроде Q: Unborrow<K>
или что-то в этом роде).
Надеюсь, что в этом есть смысл. Я обычно делаю C#, где что-то подобное не имеет смысла.