在 Rust 中使用泛型:實現外來類型上的外來特徵的模糊地帶

https://dev.to/iprosk/generics-in-rust-murky-waters-of-implementing-foreign-traits-on-foreign-types-584n

Rust 中的通用類型:實現外部類型上的外部特質

這篇文章討論我在使用通用 Rust 時一直困擾的問題,在我釐清了事情的來龍去脈之後(或者說大致上明白了),特別是在 Rust 的“運算符重載”方面,實現外部類型上的外部特質的情況。

我們能做到嗎?或者說我們能嗎?

首先,沒有什麼神秘的,對吧?Rust 手冊在這方面說得很清楚。

但我們不能為外部類型實現外部特質。例如,我們無法在我們的彙總器(aggregator)crate 中為 Vec實現 Display 特質,因為 Display 和 Vec都是在標準庫中定義的,並不是本地的。這個限制是一個稱為一貫性(coherence)的特性的一部分,更具體地說是孤立規則(orphan rule),因為父類型不存在。

當我們試圖在 Playground 中寫類似這樣的內容時:

唯有本地的特質可以被實現在原始類型上

所以我們能在 Rust 中做到這一點嗎?那 The Book 呢?納爾代數(nalgebra)怎麼做到的?

這項改變不會出現在指南中,主要通過錯誤消息傳達。最常見的一個是 E0210。該錯誤的文字將被更改為以下:

簡言之,我們在 Rust 中可以實現外部特質在外部類型上,但附帶條件。但純粹的通用變量不能起作用,這看起來像是一個技術上的困難,將來可能會被修改。

總結

我們在 Rust 中可以實現外部類型上的外部特質,但有附帶條件。然而,這種行為在 Rust 手冊中尚未出現,主要通過 E0210 和 RFCs 進行溝通。純通用並不工作,根據 RFC 2451 的說法,這看起來像是一個技術上的困難,將來可能會被修改。

via DEV Community

June 4, 2024 at 11:30AM

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *