Bài viết
Chia sẻ kiến thức của bạn.
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
Câu trả lời
1Cảnh báo chu kỳ xảy ra vì Exprđịnh nghĩa enum của bạn tạo kiểu đệ quy. Box<Expr>Trong Rust, sử dụng Exprbên trong kiểu Box<Expr>enum gây ra mối quan hệ đệ quy vì tham chiếu Exprtrực tiếp. Đây là lý do tại sao Rust đưa ra cảnh báo chu kỳ.
Mặc dù bạn đề cập đến các kiểu ma, có vẻ như bạn vẫn đang cung cấp một Exprkiểu cụ Boxthể thay vì kiểu chung ảo mà không yêu cầu một phiên bản thực. Hãy xem xét nếu bạn muốn sử dụng kiểu ảo, bạn sẽ sử dụng một tham số chung trong enum mà không cần phải tồn tại trong thời gian chạy, một cái gì đó giống như Box<PhantomData<T>>if Tlà một tham số chung không phải Exprchính nó.
Bạn có biết câu trả lời không?
Hãy đăng nhập và chia sẻ nó.