Publicación
Comparte tu conocimiento.
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
Respuestas
1La advertencia de ciclo se produce porque su Expr
definición de enumeración crea un tipo recursivo. Box<Expr>``Expr
En Rust, el uso Box<Expr>
interno del Expr
tipo de enumeración provoca una relación recursiva porque hace referencia directa. Es por eso que Rust emite una advertencia de ciclo.
Aunque mencionas los tipos fantasma, parece que sigues proporcionando un tipo concreto Expr
para ellos Box
en lugar de un tipo genérico fantasma que no requeriría una instancia real. Box<PhantomData<T>>
Considera que si quisieras usar un tipo fantasma, usarías un parámetro genérico en la enumeración que no necesita existir en tiempo de ejecución, algo así como T
si fuera Expr
un parámetro genérico y no en sí mismo.
Sabes la respuesta?
Inicie sesión y compártalo.