Move.

Bài viết

Chia sẻ kiến thức của bạn.

Santorini.
Apr 01, 2025
Hỏi đáp Chuyên Gia

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
Chia sẻ
Bình luận
.

Câu trả lời

1
CarlkawIy.
Apr 1 2025, 23:47

Cả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ó.

1
Câu trả lời hay nhất
Bình luận
.

Bạn có biết câu trả lời không?

Hãy đăng nhập và chia sẻ nó.

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

148Bài viết231Câu trả lời
Sui.X.Peera.

Kiếm phần của bạn từ 1000 Sui

Tích lũy điểm danh tiếng và nhận phần thưởng khi giúp cộng đồng Sui phát triển.

Chúng tôi sử dụng cookie để đảm bảo bạn có trải nghiệm tốt nhất trên trang web của chúng tôi.
Thêm thông tin