Eşitlik için test edilebilen iki türüm var. Ancak, bir kez Option
s içinde sarın, çeşitli PartialEq
uygulamaları tarafından sağlanan güzel pencereden dışarı doğru gidiyor. map
kullanmalı veya başka bir şekilde bunları dönüştürmeliyim.Eşitlik açısından test edilebilecek değerler içerdiğinde iki Opsiyon eşitliğini test etmenin en çılgın yolu nedir?
, en &str
ve String
kullanalım:
fn main() {
let a = "hello";
let b = "hello".to_owned();
assert_eq!(a, b); // Just fine
let a = Some(a);
let b = Some(b);
// error: mismatched types
assert_eq!(a, b);
// error: mismatched types
assert_eq!(a, b.as_ref());
// works, but highly tied to strings or slices,
// requires me to remember which is which
assert_eq!(a, b.map(|x| &x[..]));
}
Bunu yapmanın bir düz ileri daha basit ya da daha fazla yolu olmalı?
Yan soru - uygulamasının daha geniş kapsamlı olarak uygulanmasını ne engeller? Ben tutarlılık tahmin ediyorum, benim eski nemesis.
impl<T, U> PartialEq<Option<U>> for Option<T>
where
T: PartialEq<U>,
RFCs ve Pas sorunları (1, 2) bu konuda bazı sohbet var.
Bunu eklemek için Rust'a bir yama indirmeye çalıştım. Ancak, bu sürümü 1.1 sürümünde var olan dile eklemek kolay değildir. Asıl meselelerden biri, “Hiçbiri” nin belirsiz hale gelmesi ve * ne demek istediğini * belirtmeniz gerekecek: “Yok” '. Açıkçası, bu ergonomi için oldukça korkunç. –
Shepmaster
Bu çok iyi bir cevap değil. Peki eşitlik kontrolünü nasıl yapıyorsun? 'Map' ile mi? –