Beitrag
Teile dein Wissen.
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
Antworten
1Die 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.
Weißt du die Antwort?
Bitte melde dich an und teile sie.