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 Expr
Enum-Definition einen rekursiven Typ erstellt. Box<Expr>``Expr
In Rust Box<Expr>``Expr
fü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 Expr
für den angeben, Box
anstatt 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 T
wenn es sich um Expr
einen generischen Parameter handelt, der nicht selbst existiert.
Weißt du die Antwort?
Bitte melde dich an und teile sie.