Пост
Поделитесь своими знаниями.
Why does Rust enum with Box create cycle warning even with phantom?
I'm working with Rust and I have the following code:
public enum Expr {
Apply(Box<Expr>, Box<Expr>),
}
It seems like I'm getting a cycle warning because Expr contains Box<Expr>. However, I'm using phantom types, and I thought that would make it safe to compile. Can someone explain why this cycle warning is happening despite using phantom types?
- Move CLI
- Move
Ответы
1Предупреждение о цикле возникает из-за того, что Exprопределение перечисления создает рекурсивный тип. Box<Expr>``ExprВ Rust использование Box<Expr>внутреннего Exprтипа enum вызывает рекурсивное отношение, поскольку оно содержит прямые ссылки. Вот почему Rust выдает предупреждение о цикле.
Несмотря на то, что вы упоминаете фантомные типы, похоже, вы все же предлагаете конкретный тип Expr``Boxвместо фантомного универсального типа, для которого не нужен реальный экземпляр. Box<PhantomData<T>>Предположим, что если вы хотите использовать фантомный тип, вы должны использовать в перечислении общий параметр, который не обязательно должен существовать во время выполнения, например, Tесли он сам по себе Exprявляется универсальным параметром.
Знаете ответ?
Пожалуйста, войдите в систему и поделитесь им.