簡體   English   中英

它是一種書寫約定嗎?作為一個特征綁定本身的大小?

[英]Is it a convention to write ?Sized by itself as a trait bound?

編程 Rust的第 297 頁上,您可以找到以下內容

impl HashMap<K, V> where K: Eq + Hash
{
  fn get<Q: ?Sized>(&self, key: &Q) -> Option<&V>
      where K: Borrow<Q>,
            Q: Eq + Hash
}

我以前見過這個?Sized是自己寫的,而特征邊界的 rest 在不同的行上? 這是一個約定嗎? 據我了解,以上內容實際上與以下內容相同嗎?

impl HashMap<K, V> where K: Eq + Hash
{
  fn get<Q>(&self, key: &Q) -> Option<&V>
      where K: Borrow<Q>,
            Q: Eq + Hash + ?Sized
}

為什么?Sized被拆分了? 您可以在第 295 頁的類似示例中看到這一點,

...
where T: AsRef<U>
      T: ?Sized, U: ?Sized
...

那是純粹的約定,它不是一成不變的,但它確實有一些優點。

如果不合適(當單態化時),特殊語法?Sized允許編譯器刪除這個界限。 因此,為了便於閱讀,將其拆分並將其放在通用定義而不是where子句中,並且將它與其他人不同,它不是一個嚴格、嚴格的標記這一事實分開確實是有道理的。

那里的一些庫 go 甚至進一步列出了通用定義中的所有標記,以及where子句中的所有特征。

正如評論中所述並由@PeterHall 通過提交日志發現,在 rust 1.15 之前, ?Sized僅作為類型定義中的特征要求提供。 此 PR將其更改為我們今天的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM