Допис
Діліться своїми знаннями.
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визначення enum створює рекурсивний тип. Box<Expr>У Rust використання Exprвсередині Box<Expr>типу enum спричиняє рекурсивний зв'язок, оскільки Exprбезпосередньо посилання. Ось чому Rust дає попередження про цикл.
Незважаючи на те, що ви згадуєте фантомні типи, здається, що ви все ще надаєте конкретний тип Expr``Boxзамість фантомного загального типу, який не вимагав би реального екземпляра. Подумайте, якщо ви хотіли використовувати фантомний тип, ви б використовували загальний параметр у enum, який не повинен існувати під час виконання, щось на кшталт Box<PhantomData<T>>if є Tзагальним параметром, а не Exprсам собою.
Ви знаєте відповідь?
Будь ласка, увійдіть та поділіться нею.