& ldquo; не может выйти из заимствованного контента & rdquo; при замене поля структуры [дубликат]

Вам понадобится объект и .each (или .forEach в родном массиве).

var inputsContainer = $('.inputs-container');
var inputValues = {};

var inputValues = inputsContainer.find('input.multicheckbox-item').each( function() {
    inputValues[$(this).attr('name')] = ($(this).prop('checked') ? 1 : 0);
});

console.log(inputValues);
0
задан Andrey Tyukin 31 January 2019 в 21:15
поделиться

2 ответа

increment_item() принимает Container по ссылке, и item нельзя перемещать (или «использовать»), пока оно находится за ссылкой, поскольку increment() принимает Item по значению. Самый быстрый способ исправить это - сделать Item типом Copy. Это запустит копию, а не движение (т. Е. Потребляет). детская площадка

#[derive(Clone, Copy)]
struct Item {
    x: u32,
}
...
...

Для получения дополнительной информации, пожалуйста, обратитесь Копировать

0
ответ дан cotigao 31 January 2019 в 21:15
поделиться
  • Item::increment ожидает self по значению, оно перемещает Item, на котором оно вызывается.
  • Container::increment_item берет &mut self по ссылке, он позволяет изменять self, но не позволяет вам вступать во владение self (или любой из его частей).
  • Когда вы вызываете self.item.increment(amount), вы пытаетесь передать значение self.item по значению, тем самым перемещая владение в функцию Item::increment, но вам не разрешено делать это со ссылками на значения, которыми вы не владеете.

Просто передайте self в Item::increment по изменяемой ссылке, вот для чего нужны изменяемые ссылки:

struct Item {
    x: u32,
}

impl Item {
    pub fn increment(&mut self, amount: u32) {
        self.x += amount;
    }
}

struct Container {
    item: Item,
}

impl Container {
    pub fn increment_item(&mut self, amount: u32) {
        self.item.increment(amount);
    }
}

Если вы настаиваете на том, чтобы стать владельцем Item, тогда вы можете используйте mem::replace:

use std::mem;

struct Item {
    x: u32,
}

impl Item {
    pub fn increment(self, amount: u32) -> Self {
        Item { x: self.x + amount }
    }
}

struct Container {
    item: Item,
}

impl Container {
    pub fn increment_item(&mut self, amount: u32) {
        self.item = mem::replace(&mut self.item, Item { x: 0 }).increment(amount);
    }
}

, но это кажется излишне сложным в этом случае.

0
ответ дан Andrey Tyukin 31 January 2019 в 21:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: