Move.

Пост

Поделитесь своими знаниями.

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определение перечисления создает рекурсивный тип. Box<Expr>``ExprВ Rust использование Box<Expr>внутреннего Exprтипа enum вызывает рекурсивное отношение, поскольку оно содержит прямые ссылки. Вот почему Rust выдает предупреждение о цикле.

Несмотря на то, что вы упоминаете фантомные типы, похоже, вы все же предлагаете конкретный тип Expr``Boxвместо фантомного универсального типа, для которого не нужен реальный экземпляр. Box<PhantomData<T>>Предположим, что если вы хотите использовать фантомный тип, вы должны использовать в перечислении общий параметр, который не обязательно должен существовать во время выполнения, например, 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, чтобы гарантировать вам лучший опыт на нашем сайте.
Подробнее