Допис

Діліться своїми знаннями.

Допис

Діліться своїми знаннями.

Santorini.
Apr 01, 2025
Питання та відповіді експертів

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
2
1
Поділитися
Коментарі
.

Відповіді

1
CarlkawIy.
Apr 1 2025, 23:47

Попередження про цикл виникає через те, що Exprвизначення enum створює рекурсивний тип. Box<Expr>У Rust використання Exprвсередині Box<Expr>типу enum спричиняє рекурсивний зв'язок, оскільки Exprбезпосередньо посилання. Ось чому Rust дає попередження про цикл.

Незважаючи на те, що ви згадуєте фантомні типи, здається, що ви все ще надаєте конкретний тип Expr``Boxзамість фантомного загального типу, який не вимагав би реального екземпляра. Подумайте, якщо ви хотіли використовувати фантомний тип, ви б використовували загальний параметр у enum, який не повинен існувати під час виконання, щось на кшталт Box<PhantomData<T>>if є Tзагальним параметром, а не Exprсам собою.

1
Найкраща відповідь
Коментарі
.

Ви знаєте відповідь?

Будь ласка, увійдіть та поділіться нею.

Move is an executable bytecode language used to implement custom transactions and smart contracts.

148Пости231Відповіді
Sui.X.Peera.

Зароби свою частку з 1000 Sui

Заробляй бали репутації та отримуй винагороди за допомогу в розвитку спільноти Sui.

Кампанія винагородТравень
Ми використовуємо файли cookie, щоб гарантувати вам найкращий досвід на нашому сайті.
Детальніше