sách gpt4 ăn đã đi

Sao chép một đối tượng không thể thực hiện Sao chép (sao chép một đối tượng không thể thực hiện Sao chép)

In lại Tác giả: trợ lý lỗi Thời gian cập nhật: 26-10-2023 20:24:07 31 4
mua khóa gpt4 giày nike



Tôi có đoạn mã này, trong đó tôi cần tìm ra loại giá trị được mã hóa và tôi không biết đó là Chuỗi, số nguyên không dấu hay Vector của Chuỗi. Tôi nghĩ đến việc thực hiện như sau:

Tôi có một đoạn mã cần xác định loại giá trị được mã hóa nhưng tôi không biết đó là chuỗi, số nguyên không dấu hay vectơ của chuỗi. Tôi muốn làm những việc sau:


trong khi hãy để Some(pair) = dict_dec.next_pair()? {
cặp đấu {
...
// &[u8] Đối tượng<'_, '_>
(trường không xác định, giá trị) => {
hãy để field_name = String::from_utf8_lossy(trường không xác định).to_string();
hãy để value_as_string: String = khớp với String::decode_bencode_object(value) {
Được(s) => s,
Err(_) => khớp với u64::decode_bencode_object(giá trị) {
Được(u) => u.to_string(),
Err(_) => khớp với Vec::::decode_bencode_object(giá trị) {
Ok(v) => v.join(", "),
Err(_) => "Giá trị không xác định".to_string(),
},
},
};

cho tuple: (String, String) = (field_name, value_as_string);
......

}
}


Tuy nhiên giá trị từ thùng uốn cong không thể triển khai Sao chép, nó được di chuyển sau khi gọi giải mã_bencode_object, Và giải mã_bencode_object không tham chiếu. Có cách nào tôi có thể gọi nó nhiều lần, tạo một bản sao hoặc một cách tiếp cận khác để có được kết quả tương tự không?

Tuy nhiên, giá trị từ thùng bị uốn cong không thể sao chép được, nó được di chuyển sau khi gọi Decode_Bencode_Object và Decode_Bencode_Object không chấp nhận tham chiếu. Có cách nào để tôi có thể gọi nó nhiều lần để tạo một bản sao hay cách khác để tôi nhận được kết quả tương tự không?


Thêm câu trả lời

Tôi không biết chương trình giải mã phức tạp này có liên quan gì đến việc sao chép, nhưng để trả lời câu hỏi trong tiêu đề, u32, Sợi dây, Và Vector tất cả thực hiện Dòng vô tính, nghĩa là bạn có thể gọi .dòng vô tính() để sao chép chúng. Lệnh gọi phải rõ ràng, vì việc sao chép vectơ và chuỗi phức tạp hơn so với việc sao chép bit đơn thuần, do đó Rust không muốn việc này diễn ra ở chế độ ẩn.

Tôi không biết sơ đồ giải mã phức tạp này có liên quan gì đến việc sao chép, nhưng để trả lời câu hỏi tiêu đề, u32, chuỗi và vectơ<字符串>Cả hai đều triển khai Clone, nghĩa là bạn có thể gọi .Clone() để sao chép chúng. Cuộc gọi phải rõ ràng vì việc sao chép vectơ và chuỗi phức tạp hơn việc sao chép bit đơn giản, vì vậy Rust không muốn nó diễn ra ở hậu trường.

Tôi không cố sao chép u32, String hay Vector, nhưng giá trị biến mà tôi sử dụng làm đối số cho decode_bencode_object. value là một đối tượng từ bendy crate và không triển khai sao chép, tuy nhiên tôi muốn truyền nó ba lần làm đối số để thử giải mã nó thành String, int hoặc Vector.

Tôi không cố sao chép u32, chuỗi hoặc vectơ mà thay vào đó là giá trị biến tôi đang sử dụng làm đối số DECODE_BENCODE_OBJECT. Giá trị là một đối tượng từ thùng cong và không thực hiện sao chép, nhưng tôi muốn chuyển nó dưới dạng tham số ba lần để cố gắng giải mã nó dưới dạng chuỗi, số nguyên hoặc vectơ.

Tôi nghĩ sẽ hữu ích nếu bạn chỉnh sửa câu hỏi của mình để bao gồm thông báo lỗi đầy đủ mà bạn thấy khi thử cách này và thông tin về thư viện này giải mã_bencode_object chức năng thuộc về, do đó, vấn đề và những hạn chế của giải pháp có thể trở nên rõ ràng hơn.

Tôi nghĩ sẽ hữu ích nếu chỉnh sửa câu hỏi của bạn để bao gồm thông báo lỗi đầy đủ mà bạn thấy khi thử điều này, cũng như thông tin về thư viện mà hàm giải mã_bencode_Object này thuộc về thư viện nào, để bạn có thể hiểu rõ hơn vấn đề là gì và giải pháp có thể là gì.

Khuyến nghị câu trả lời tuyệt vời

Tôi suy ra từ câu hỏi của bạn rằng bạn đang sử dụng cái TừBencode đặc điểm từ thùng uốn cong và do đó các giá trị này thuộc loại Sự vật. Từ TừBencode chiếm quyền sở hữu của Sự vật nó đã được đưa ra, bạn không thể tiếp tục sử dụng giá trị sau khi bạn đã chuyển nó cho một kiểu triển khai đặc điểm này.

Tôi suy ra từ câu hỏi của bạn rằng bạn đang sử dụng tính năng FromBencode trong Crate Bendy, vì vậy các giá trị thuộc loại Object. Vì FromBencode nắm quyền sở hữu đối tượng mà nó chỉ định nên bạn không thể tiếp tục sử dụng nó sau khi chuyển một giá trị cho việc triển khai đặc điểm của một loại.


Thay đổi nhỏ nhất từ ​​chương trình hiện tại của bạn sẽ là gọi dòng vô tính phương pháp để tạo một bản sao sâu của bạn Sự vật cho mỗi cuộc gọi đến giải mã_bencode_object. Điều đó có nghĩa là bạn sẽ di chuyển bản sao vào phương thức và do đó bạn sẽ giữ quyền sở hữu đối tượng gốc. Tuy nhiên, bạn sẽ phải trả chi phí sao chép Sự vật có thể có giá trị gấp nhiều lần, vì vậy bạn nên cân nhắc xem chi phí đó có chấp nhận được cho trường hợp sử dụng của bạn hay không.

Thay đổi tối thiểu so với chương trình hiện tại là gọi phương thức sao chép để tạo một bản sao sâu của đối tượng cho mỗi lệnh gọi tới giải mã_bencode_Object. Điều này có nghĩa là bạn sẽ di chuyển bản sao vào phương thức, do đó bạn sẽ giữ quyền sở hữu đối tượng ban đầu. Tuy nhiên, bạn có thể phải trả chi phí sao chép giá trị đối tượng nhiều lần, vì vậy bạn nên xem xét liệu chi phí đó có thể chấp nhận được đối với trường hợp sử dụng của mình hay không.


Một khả năng khác là quyết định loại nào sẽ thử trước khi bạn gọi phương thức đặc điểm. Tôi không quen thuộc với thư viện này nên tôi đoán một chút nhưng có vẻ như bạn có thể đưa ra một số suy luận dựa trên biến thể nào Đối tượng enum được chọn như thế này:

Một khả năng khác là quyết định nên thử loại nào trước khi gọi phương thức đặc điểm. Tôi không quen với thư viện này nên tôi đoán một chút, nhưng có vẻ như bạn có thể đưa ra một số suy luận dựa trên biến thể của đối tượng enum mà bạn chọn, như sau:


khớp &giá trị {
Đối tượng::Byte(_) => {
// sử dụng String::decode_bencode_object
}
Đối tượng::Số nguyên(_) => {
// sử dụng u64::decode_bencode_object
}
Đối tượng::Danh sách(_) => {
// sử dụng Vec::::decode_bencode_object
}
}

Các cuộc thi đấu biểu thức sử dụng một vay mượn của giá trị để bạn có thể giữ quyền sở hữu nó để sử dụng bên trong mỗi một trong ba cánh tay phù hợp. Mỗi cánh tay chỉ cần gọi một giải mã_bencode_object phương pháp, vì vậy điều này có thể chấp nhận được miễn là bạn không cố gắng sử dụng giá trị một lần nữa sau khi cuộc thi đấu khối.

Biểu thức so khớp sử dụng việc mượn một giá trị để bạn có thể giữ quyền sở hữu giá trị đó để sử dụng trong mỗi nhánh trong số ba nhánh so khớp. Chỉ cần gọi một phương thức Decode_Bencode_Object cho mỗi ARM, vì vậy, miễn là bạn không cố gắng sử dụng lại VALUE sau khối Match, điều này có thể chấp nhận được.


Thêm câu trả lời
31 4 0
trợ lý lỗi
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress