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 Expr
bên trong kiểu Box<Expr>
enum gây ra mối quan hệ đệ quy vì tham chiếu Expr
trự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 Expr
kiểu cụ Box
thể 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 T
là một tham số chung không phải Expr
chính nó.
Bạn có biết câu trả lời không?
Hãy đăng nhập và chia sẻ nó.