簡體   English   中英

如何啟用兩個功能導致 Rust 中的沖突?

[英]How can I make two features enabled lead to a conflict in Rust?

我有兩個功能: feature_1feature_2

[features]
default = ["feature_1"]
feature_1 = []
feature_2 = []

我想讓用戶一次只選擇其中一個,因為同時選擇兩個會導致一些重要代碼的重復以及其他一些原因。 我該怎么做?

從根本上說,你不能。 Cargo 特性是可添加的,特性可以被依賴樹中的任何 crate 啟用。 Cargo 有一個隱含的假設,即啟用附加功能總是有效的。

更重要的是,功能不僅僅是請求,它們是需求 如果一個板條箱需要feature_1 ,而另一個板條箱需要feature_2 ,則您有兩個板條箱不可能一起工作。 Cargo(和 Rust 本身)不遺余力地嘗試使這種情況難以創建。

最好的解決方案是更改您的 crate 的編寫方式,以便可以同時啟用這兩個功能。 如果這真的不可能,你能做的最好的事情就是阻止編譯成功。 這可以通過用於檢測不兼容功能並失敗的 crate 的構建腳本來完成,或者通過將非編譯代碼放入僅在啟用不兼容功能時啟用的 crate 中。

對於它的價值,我選擇使用這種方法:

#[cfg(all(feature = "feature_1", feature = "feature_2"))]
compile_error!("Feature 1 and 2 are mutually exclusive and cannot be enabled together");

我希望它能幫助其他人尋找解決同樣問題的方法。

暫無
暫無

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

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