Как можно обойти ошибку «заимствованного содержимого» при чтении значения из ссылки на связанный тип признака? - PullRequest
0 голосов
/ 15 мая 2019

У меня есть указатель на значение u64, и я не могу его прочитать. Я получаю эту ошибку:

error[E0507]: cannot move out of borrowed content
   --> /home/niko/sub/substrate/srml/system/src/lib.rs:533:32
    |
533 |             let mut aid: T::AccountId = *copy_who;
    |                                         ^^^^^^^^^
    |                                         |
    |                                         cannot move out of borrowed content
    |                                         help: consider removing the `*`: `copy_who`

Как можно обойти ошибку «заимствованный контент»? Какой смысл иметь указатель на переменную, если вы не можете прочитать ничего, на что она указывает?

impl<T: Trait> Module<T> {
    // getter for AccountId
    pub fn get_account_id(who: &T::AccountId) -> T::AccountId {
        let mut copy_who: &T::AccountId = who;
        {
            let mut aid: T::AccountId = *copy_who;
            return aid;
        }
    }
}

AccountId определяется следующим образом:

type AccountId = u64;

1 Ответ

2 голосов
/ 15 мая 2019

Ваша проблема может быть уменьшена до

trait Example {
    type AccountId;
}

fn get_account_id<T>(who: &T::AccountId)
where
    T: Example,
{
    *who;
}
error[E0507]: cannot move out of borrowed content
 --> src/lib.rs:8:5
  |
8 |     *who;
  |     ^^^^ cannot move out of borrowed content

Для компиляции этого кода T::AccountId должен реализовать Copy:

fn get_account_id<T>(who: &T::AccountId)
where
    T: Example,
    T::AccountId: Copy,
{
    *who;
}

Однако это не самое гибкое решение.

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