Move.

Beitrag

Teile dein Wissen.

Santorini.
Apr 01, 2025
Experten Q&A

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
Teilen
Kommentare
.

Antworten

1
CarlkawIy.
Apr 1 2025, 23:47

Die Zykluswarnung tritt auf, weil Ihre ExprEnum-Definition einen rekursiven Typ erstellt. Box<Expr>``ExprIn Rust Box<Expr>``Exprführt die Verwendung innerhalb des Enum-Typs zu einer rekursiven Beziehung, da direkt darauf verwiesen wird. Aus diesem Grund gibt Rust eine Zykluswarnung aus.

Obwohl Sie Phantomtypen erwähnen, scheint es, dass Sie immer noch einen konkreten Typ Exprfür den angeben, Boxanstatt eines generischen Phantomtyps, für den keine echte Instanz erforderlich wäre. Box<PhantomData<T>>Stellen Sie sich vor, wenn Sie einen Phantomtyp verwenden möchten, würden Sie einen generischen Parameter in der Aufzählung verwenden, der zur Laufzeit nicht existieren muss, etwa Twenn es sich um Expreinen generischen Parameter handelt, der nicht selbst existiert.

1
Beste Antwort
Kommentare
.

Weißt du die Antwort?

Bitte melde dich an und teile sie.

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

148Beiträge231Antworten
Sui.X.Peera.

Verdiene deinen Anteil an 1000 Sui

Sammle Reputationspunkte und erhalte Belohnungen für deine Hilfe beim Wachstum der Sui-Community.

Wir verwenden Cookies, um sicherzustellen, dass Sie die beste Erfahrung auf unserer Website haben.
Mehr Infos