Move.

Publicación

Comparte tu conocimiento.

Santorini.
Apr 01, 2025
P&R expertos

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
Cuota
Comentarios
.

Respuestas

1
CarlkawIy.
Apr 1 2025, 23:47

La advertencia de ciclo se produce porque su Exprdefinición de enumeración crea un tipo recursivo. Box<Expr>``ExprEn Rust, el uso Box<Expr>interno del Exprtipo 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 Exprpara ellos Boxen 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 Tsi fuera Exprun parámetro genérico y no en sí mismo.

1
Mejor Respuesta
Comentarios
.

Sabes la respuesta?

Inicie sesión y compártalo.

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

148Publicaciones231Respuestas
Sui.X.Peera.

Gana tu parte de 1000 Sui

Gana puntos de reputación y obtén recompensas por ayudar a crecer a la comunidad de Sui.

Usamos cookies para asegurarnos de que obtenga la mejor experiencia en nuestro sitio web.
Más información