Пост
Поделитесь своими знаниями.
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
является универсальным параметром.
Знаете ответ?
Пожалуйста, войдите в систему и поделитесь им.