2015-05-19 33 views
24

Tôi tìm thấy định nghĩa cho std::borrow::BorrowMut:Dấu chấm hỏi có ý nghĩa gì trong một tham số kiểu bị ràng buộc?

pub trait BorrowMut<Borrowed>: Borrow<Borrowed> 
where 
    Borrowed: ?Sized, 
{ 
    fn borrow_mut(&mut self) -> &mut Borrowed; 
} 

không dấu hỏi trước Sized có ý nghĩa gì trong tham số này loại ràng buộc (Borrowed: ?Sized)?

tôi tham khảo ý kiến:

nhưng không tìm thấy một lời giải thích. Vui lòng đưa ra một tham chiếu trong câu trả lời của bạn.


¹ đặc biệt là xem phần 5.20 Traits
² và phần 6.1.9 Traits

Trả lời

14

Nó có nghĩa là đặc điểm là tùy chọn. Cú pháp hiện tại đã được giới thiệu trong DST syntax RFC.

Tính trạng duy nhất mà tôi biết là hoạt động cho ?Sized.

Trong ví dụ cụ thể này, chúng ta có thể thực hiện BorrowMut cho loại không đúng cở, như [T] - lưu ý rằng không có & đây!

Một built-in thực hiện tận dụng rằng:

impl<T> BorrowMut<[T]> for Vec<T> 

Như Matthieu M. adds:

Đây là một trường hợp của một mở rộng ràng buộc; trong giới hạn chung áp đặt nhiều hơn ràng buộc, nhưng trong trường hợp của Sized, nó đã được quyết định rằng trừ khi có ghi chú chung, T sẽ được giả định là Sized. Cách để lưu ý đối diện sẽ là đánh dấu nó ?Sized ("có thể Sized").

+6

Cụ thể: đây là trường hợp * giới hạn mở rộng *; trong giới hạn chung áp đặt * nhiều hơn * ràng buộc tuy nhiên trong trường hợp của 'Sized' nó đã được quyết định rằng trừ khi có ghi chú chung' T' sẽ được giả định là 'Sized' và cách để lưu ý nó sẽ được đánh dấu nó'? '(có thể là' có kích thước '). –

Các vấn đề liên quan