Rust не может индексировать значение типа 'datatype <{integer}, {integer}> ` - PullRequest
0 голосов
/ 04 мая 2020

У меня есть следующее:

impl<'a, K: Hash + Eq, V> Index<K> for &'a LFUCache<K, V> {
    type Output = V;
    fn index(&self, index: K) -> &Self::Output {
        self.get(index).unwrap()

    }
}

Это прекрасно компилируется.

Теперь, когда я делаю:

let mut lfu = LFUCache::new(2);
lfu.set(1, 1);
lfu[1] == 1;

Я получаю ошибку:

cannot index into a value of type `LFUCache<{integer}, {integer}>`
   --> src/lib.rs:154:9
    |
154 |         lfu[1] == 1;
    |         ^^^^^^

Как мне это исправить?

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Исправлено, сделав это: impl<'a, K:Hash+Eq, V> Index<K> for LFUCache<K, V> {...}

0 голосов
/ 04 мая 2020

Число без какого-либо суффикса в ржавчине не имеет определенного типа c int (это может быть любой из i8, i16, i32, u8, et c), поэтому компилятор ржавчины не может определить, какой вы хотите твой кеш держать. Есть три способа исправить это:

  1. Явно указать при его создании: LFUCache::<i32,i32>::new(2)
  2. Явно указать тип привязки. let mut lfu: LFUCache<i32,i32> =
  3. Явно укажите тип вставляемого int с суффиксом: lfu[1i32] = 1i32;

Я считаю, что вариант 2 является наиболее идиоматическим c в вашем примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...