Move.

Publication

Partagez vos connaissances.

Santorini.
Apr 01, 2025
Questions et Réponses avec des Experts

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
Partager
Commentaires
.

Réponses

1
CarlkawIy.
Apr 1 2025, 23:47

L'avertissement de cycle se produit car votre Exprdéfinition d'énumération crée un type récursif. Box<Expr>Dans Rust, Exprl'utilisation du Box<Expr>type inside the enum provoque une relation récursive car il fait Exprdirectement référence. C'est pourquoi Rust émet un avertissement de cycle.

Même si vous mentionnez les types fantômes, il semble que vous fournissiez toujours un type concret Exprau Boxlieu d'un type générique fantôme qui ne nécessiterait pas d'instance réelle. Supposons que si vous vouliez utiliser un type fantôme, vous utiliseriez un paramètre générique dans l'énumération qui n'a pas besoin d'exister au moment de l'exécution, quelque chose comme Box<PhantomData<T>>if Test un paramètre générique et non Exprlui-même.

1
Meilleure réponse
Commentaires
.

Connaissez-vous la réponse ?

Veuillez vous connecter et la partager.

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

148Publications231Réponses
Sui.X.Peera.

Gagne ta part de 1000 Sui

Gagne des points de réputation et obtiens des récompenses pour avoir aidé la communauté Sui à se développer.

Nous utilisons des cookies pour vous assurer la meilleure expérience sur notre site Web.
Plus d'infos