RefCell
содержит объект внутри, оборачивая его, это не выделенное значение кучи.Вот почему компилятор говорит «рекурсивный без косвенного обращения»: RefCell
не является косвенным указанием.
Box
и Rc
, с другой стороны, содержат ссылку на объект, размещенный где-то еще, и поэтомуявляются косвенными значениями .
Без косвенного действия перечисление List
заканчивается бесконечным, поскольку каждое Cons
содержит полное перечисление List
внутри своего RefCell
.
Вы не можете создавать рекурсивные структуры данных, которые содержат себя как значения, только как указатели или ссылки.