Publication
Partagez vos connaissances.
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
Réponses
1L'avertissement de cycle se produit car votre Expr
définition d'énumération crée un type récursif. Box<Expr>
Dans Rust, Expr
l'utilisation du Box<Expr>
type inside the enum provoque une relation récursive car il fait Expr
directement 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 Expr
au Box
lieu 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 T
est un paramètre générique et non Expr
lui-même.
Connaissez-vous la réponse ?
Veuillez vous connecter et la partager.