2015-05-25 20 views
5

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?

Örnek olarak

, en &str ve String kullanalım:

mutlaka
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.

cevap

0

Bunu engellemenin teknik bir nedeni yok gibi görünüyor, uygulama çalışması yapmakla ilgili bir mesele gibi görünüyor.

+0

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

+0

Bu çok iyi bir cevap değil. Peki eşitlik kontrolünü nasıl yapıyorsun? 'Map' ile mi? –

İlgili konular