Почему мы не можем использовать RefCell для рекурсивных структур данных? - PullRequest
0 голосов
/ 03 января 2019

Почему мы не можем использовать RefCell для рекурсивных структур данных в Rust?

Недействительно:

enum List {
    Cons(i32, RefCell<List>),
    Nil,
}

Допустимо:

enum List {
    Cons(i32, Rc<List>), // or Box<List>
    Nil,
}

1 Ответ

0 голосов
/ 03 января 2019

RefCell содержит объект внутри, оборачивая его, это не выделенное значение кучи.Вот почему компилятор говорит «рекурсивный без косвенного обращения»: RefCell не является косвенным указанием.

Box и Rc, с другой стороны, содержат ссылку на объект, размещенный где-то еще, и поэтомуявляются косвенными значениями .

Без косвенного действия перечисление List заканчивается бесконечным, поскольку каждое Cons содержит полное перечисление List внутри своего RefCell.

Вы не можете создавать рекурсивные структуры данных, которые содержат себя как значения, только как указатели или ссылки.

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