Cố gắng triển khai đặc điểm Debug
cho loại tùy chỉnh mà tôi đã tình cờ triển khai cho Vec<T>
. Tôi gặp khó khăn trong việc hiểu cách hoạt động của nó.Hiểu việc triển khai Gỡ lỗi cho Vec <T>
Việc thực hiện đi như thế này:
impl<T: fmt::Debug> fmt::Debug for Vec<T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
fmt::Debug::fmt(&**self, f)
}
}
Tôi hiểu nó gọi thi fmt
đối với một số loại khác. Những gì tôi không thể hiểu là loại nó là gì. Tôi đã cố gắng để tìm ra nó với sự giúp đỡ của another question, và tìm kiếm trong số implementations of Debug
cho một cái gì đó có vẻ thích hợp (có thể một cái gì đó như &[T]
), nhưng không thành công.
Ý nghĩa chính xác của &**self
trong ngữ cảnh này là gì? Việc triển khai Debug
nào đang được thực hiện?
Cảm ơn bạn! Tôi chỉ nhớ một điều: Tôi đã tìm thấy một thực hiện cho '[T]' nhưng không phải cho '& [T]', là nó sau này được gọi? Tại sao? – toro2k
@ toro2k Tôi đã thêm một chút về điều đó. Hãy cho tôi biết nếu nó giúp! – Shepmaster
Tôi không nghĩ rằng có bất kỳ tự động dereferencing (hoặc tự động tham khảo), bởi vì 'fmt :: Debug :: fmt()' mất 'self' bằng cách tham khảo, tức là nó hy vọng một' & [T] ', và nó đưa ra một '& [T]'. –